我想在Pandas中透视一个数据框。我在这里关注文档:https://pandas.pydata.org/pandas-docs/stable/reshaping.html
从此数据帧开始:
date variable value
0 2000-01-03 A 0.469112
1 2000-01-04 A -0.282863
2 2000-01-05 A -1.509059
3 2000-01-03 B -1.135632
4 2000-01-04 B 1.212112
5 2000-01-05 B -0.173215
6 2000-01-03 C 0.119209
7 2000-01-04 C -1.044236
8 2000-01-05 C -0.861849
9 2000-01-03 D -2.104569
10 2000-01-04 D -0.494929
11 2000-01-05 D 1.071804
运行df.pivot(index='date', columns='variable', values='value')
请给我这个
variable A B C D
date
2000-01-03 0.469112 -1.135632 0.119209 -2.104569
2000-01-04 -0.282863 1.212112 -1.044236 -0.494929
2000-01-05 -1.509059 -0.173215 -0.861849 1.071804
我最终得到了MultiIndex数据框。图片可能更适合描述发生的情况:
但是,我想这样做:
我能找到的扁平化多索引的所有方法最终都给了我foo和bar在不同的行上。你能帮我一下吗?
答案 0 :(得分:0)
我相信您需要add_prefix
来更改列名,然后通过rename_axis
删除column.name
并为索引中的列添加reset_index
:
df1 = df.pivot(index='date', columns='variable', values='value')
df1 = df1.add_prefix(df1.columns.name + '_').rename_axis(None, axis=1).reset_index()
print (df1)
date variable_A variable_B variable_C variable_D
0 2000-01-03 0.469112 -1.135632 0.119209 -2.104569
1 2000-01-04 -0.282863 1.212112 -1.044236 -0.494929
2 2000-01-05 -1.509059 -0.173215 -0.861849 1.071804
编辑:
如果需要在列中展平MultiIndex,请使用list comprehension
:
mux = pd.MultiIndex.from_product([["A", "B", "C", "D"], ["X", "Y"]])
df = pd.DataFrame([np.arange(8)], columns=mux)
print(df)
A B C D
X Y X Y X Y X Y
0 0 1 2 3 4 5 6 7
df.columns = [f"{a}_r{b}" for a, b in df.columns]
print (df)
A_rX A_rY B_rX B_rY C_rX C_rY D_rX D_rY
0 0 1 2 3 4 5 6 7
答案 1 :(得分:0)
几小时的密集搜索之后,确定,这是我找到的简单解决方案:
df.columns = [col[0] + f"_r{col[1]}" for col in df.columns]