Python:长数据到宽数据

时间:2017-11-26 05:19:34

标签: python pandas dataframe pivot-table

我有这样的数据

userid      day        x         y

user1       monday     1         2

user1       tuesday    3         4

user2       monday     10        11

user2       tuesday    12        13

我想将其转换为

userid      monday_x        monday_y      tuesday_x     tuesday_y

user1       1                  2             3              4

user2       10                 11            12             13 

我尝试使用'pivot'功能。但我无法创建新的属性名称。 然后我尝试手动复制每一行。但是,大熊猫正在以下列方式创建。

userid      monday_x        monday_y      tuesday_x     tuesday_y

user1       1                  2             NaN              NaN

user1       NaN              NaN             3                4

user2       10                 11            NaN              NaN

user2       NaN              NaN             12               13

是否有内置函数在python中进行这种转换?

1 个答案:

答案 0 :(得分:1)

pivot_table可以在这里使用。

df = df.pivot_table(
             index='userid', columns='day', values=['x', 'y'])\
       .sort_index(axis=1, level=-1)\
       .swaplevel(0, 1, axis=1)

df.columns = df.columns.map('_'.join)

        monday_x  monday_y  tuesday_x  tuesday_y
userid                                          
user1          1         2          3          4
user2         10        11         12         13

如果需要,重置索引。使用df = df.reset_index()userid作为列。