我的原始数据帧(df)如下:
idx = [np.array(['Jan', 'Jan', 'Feb', 'Mar', 'Mar', 'Mar']),np.array(['A1', 'A2', 'A2', 'A1', 'A3', 'A4'])]
data = [{'x': 1, 'y': 50}, {'x': 5, 'y': 40}, {'x': 3, 'y': 20}, {'x': 2, 'y': 70}, {'x': 7, 'y': 10}, {'x': 3, 'y': 80}]
df = pd.DataFrame(data, index=idx, columns=['x','y'])
df.index.names=['date','type']
它看起来像这样:
x y
date type
Jan A1 1 50
A2 5 40
Feb A2 3 20
Mar A1 2 70
A3 7 10
A4 3 80
我的目标是创建一个新的数据框(df2),如下所示:
xA1 xA2 xA3 xA4 yA1 yA2 yA3 yA4
Jan 1 5 Nan Nan 50 40 Nan Nan
Feb Nan 3 Nan Nan Nan 20 Nan Nan
Mar 2 Nan 7 3 70 Nan 10 80
**我已经尝试了以下代码:
df2 = df.unstack()
这使我非常接近,但是我不知道如何从此处移到所需的数据框。
谢谢
答案 0 :(得分:2)
因此您可以执行unstack
,然后展平倍数索引
s=df.unstack()
s.columns=s.columns.map(''.join)
s
Out[70]:
xA1 xA2 xA3 xA4 yA1 yA2 yA3 yA4
date
Feb NaN 3.0 NaN NaN NaN 20.0 NaN NaN
Jan 1.0 5.0 NaN NaN 50.0 40.0 NaN NaN
Mar 2.0 NaN 7.0 3.0 70.0 NaN 10.0 80.0