[英]Pivot a pandas dataframe with multiple columns
我有一个示例数据框,如下所示
df1 = pd.DataFrame({'Gender':['Male','Male','Male','Male','Female','Female','Female','Female','Male','Male','Male','Male','Female','Female','Female','Female'],
'Year' :[2008,2008,2009,2009,2008,2008,2009,2009,2008,2008,2009,2009,2008,2008,2009,2009],
'rate':[2.3,3.2,4.5,6.7,5.6,3.2,3.5,2.6,2.3,3.2,4.5,6.7,5.6,3.2,3.5,2.6],
'Heading':['TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123',
'TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456'],
'target':[31.2,33.4,33.4,35.2,35.2,36.4,36.4,37.2,31.2,33.4,33.4,35.2,35.2,36.4,36.4,37.2],
'day_type':['wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend']})
我想转置/旋转它们以获得如下所示的 output 但对于我的代码,它会引发错误,如下所示
df1.pivot(index='Year', columns='Heading', values='rate')
在 SO post 的帮助下,我写了这篇文章,但是对于 3 列,我不知道如何使它工作?
df1 = df1.pivot_table(index=['Year','Gender','day_type'],columns='Heading',values='rate').unstack()
df1.columns = ['_'.join(i) for i in df1.columns.tolist()]
我希望我的 output 如下所示,其中每年都作为一行,而该年的所有相应条目都作为列。
请注意,我没有填写值,因为表列结构更重要。
尝试使用map
,您还需要取消unstack
level
df1 = df1.pivot_table(index=['Year','Gender','day_type'],columns='Heading',values='rate').unstack([1,2])
df1.columns=df1.columns.map('_'.join)
df1
TNMAB123_Female_wk ... TNMAB456_Male_wkend
Year ...
2008 5.6 ... 3.2
2009 3.5 ... 6.7
[2 rows x 8 columns]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.