我有这个看起来像这样的数据框
df = pd.DataFrame(
[[2, 4, 'ABC', '01Jan2017', '01Jul2016', '01Jul2017', 0.5, 0.3, 0.7],
[9, 2, 'DEF', '01Jan2017', '01Jul2016', '01Jul2017', 0.5, 0.3, 0.7]],
columns=[
'SEDOL', 'ISIN', 'INSTRUMENT',
'DT_TRANSACTED', 'DT_SIX_MTHS_BEF', 'DT_SIX_MTHS_AFT',
'PX_TRANSACTED', 'PX_SIX_MONTHS_BEF', 'PX_SIX_MONTHS_AFT']
)
如何将每行分成 3 行,每行具有每个属性('SEDOL'、'ISIN'、'INSTRUMENT'),同时重新调整 dt 和 px 列。理想情况下,每一行都应拆分为如下结构:
SEDOL, ISIN, INSTRUMENT, DT_TRANSACTED, PX_TRANSACTED
SEDOL, ISIN, INSTRUMENT, DT_SIX_MTHS_BEF, PX_SIX_MONTHS_BEF
SEDOL, ISIN, INSTRUMENT, DT_SIX_MTHS_AFT, PX_SIX_MONTHS_AFT
我试过wide_to_long 和melt 但无济于事。
您需要使用 将数据分解并使用filter
将它们连接回来concat
。
df = df.set_index(['SEDOL', 'ISIN', 'INSTRUMENT']).sort_index()
i = df.filter(like='DT_')
j = df.filter(like='PX_')
df = pd.concat([
i.stack().reset_index(level=-1),
j.stack().reset_index(level=-1)
],
axis=1
)
df.columns = ['DT_Var', 'DT_Val', 'PX_Var', 'PX_Val']
DT_Var DT_Val PX_Var PX_Val
SEDOL ISIN INSTRUMENT
2 4 ABC DT_TRANSACTED 01Jan2017 PX_TRANSACTED 0.5
ABC DT_SIX_MTHS_BEF 01Jul2016 PX_SIX_MONTHS_BEF 0.3
ABC DT_SIX_MTHS_AFT 01Jul2017 PX_SIX_MONTHS_AFT 0.7
9 2 DEF DT_TRANSACTED 01Jan2017 PX_TRANSACTED 0.5
DEF DT_SIX_MTHS_BEF 01Jul2016 PX_SIX_MONTHS_BEF 0.3
DEF DT_SIX_MTHS_AFT 01Jul2017 PX_SIX_MONTHS_AFT 0.7
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句