给定dataframe
user month valueX valueY
--------------------------------
884 2013-01 1 5
889 2013-02 0 15
884 2013-02 7 29
889 2013-01 9 38
我该如何解决这个:
user |2013-01-valueX |2013-02-valueX |2013-01-valueY |2013-02-valueY
--------------------------------------------------------------------
884 |1 |7 |5 |19
889 |9 |0 |38 |15
您可以使用unstack
df1 = df.set_index(['user', 'month'])[['valueX', 'valueY']].unstack()
df1.columns = df1.columns.swaplevel().map('-'.join)
df1 = df1.reset_index()
user 2013-01-valueX 2013-02-valueX 2013-01-valueY 2013-02-valueY
0 884 1 7 5 29
1 889 9 0 38 15
编辑:正如@zero所建议的那样,您可以在不使用shaplevel()的情况下组合多索引列,
df.columns = df1.columns.map('{0[1]}-{0[0]}'.format)
您可以简单地使用枢轴函数:
df2 = df.pivot(index='user', columns='month')
根据"用户"one_answers"月份"组组排行。
结果是:
valueX valueY
month 2013-01 2013-02 2013-01 2013-02
user
884 1 7 5 29
889 9 0 38 15
注意:这些列现在是一个多级索引,例如,要在2013-01获取用户889的Valuex,您需要执行:df2.loc[889, ('valueX', '2013-01')]
或所有日期:df2.loc[889, ('valueX', slice(None))]