Pandas dataframe - column transpose



给定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))]

最新更新