【问题标题】:How can I unpivot or stack a pandas dataframe in the way that I asked?如何按照我要求的方式取消透视或堆叠 pandas 数据框?
【发布时间】:2020-03-17 03:20:07
【问题描述】:
我有一个 python pandas 数据框。
例如这里是我的数据:
id A_1 A_2 B_1 B_2
0 j2 1 5 10 8
1 j3 2 6 11 9
2 j4 3 7 12 10
我希望它看起来像这样:
id Other A B
0 j2 1 1 10
1 j2 2 5 8
2
请你帮帮我。非常感谢!
【问题讨论】:
标签:
python-3.x
pandas
numpy
dataframe
【解决方案1】:
将wide_to_long 与DataFrame.sort_values 一起使用:
df = (pd.wide_to_long(df, ['A','B'], i='id', j='Other', sep='_')
.sort_values('id')
.reset_index())
print (df)
id Other A B
0 j2 1 1 10
1 j2 2 5 8
2 j3 1 2 11
3 j3 2 6 9
4 j4 1 3 12
5 j4 2 7 10
【解决方案2】:
我们也可以使用DataFrame.melt + Series.str.split 来执行DataFrame.pivot_table:
df2=df.melt('id')
df2[['columns','Other']]=df2['variable'].str.split('_',expand=True)
new_df= ( df2.pivot_table(columns='columns',index=['id','Other'],values='value')
.reset_index()
.rename_axis(columns=None) )
print(new_df)
id Other A B
0 j2 1 1 10
1 j2 2 5 8
2 j3 1 2 11
3 j3 2 6 9
4 j4 1 3 12
5 j4 2 7 10