给出数据框
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
提前致谢!
答案 0 :(得分:3)
您可以使用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建议的那样,您可以组合多索引列而不使用像这样的swaplevel(),
df.columns = df1.columns.map('{0[1]}-{0[0]}'.format)
答案 1 :(得分:2)
您只需使用数据透视功能:
df2 = df.pivot(index='user', columns='month')
根据'user'对行进行分组,并根据'month'对列进行分组。
结果是:
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))]