合并订单与列中的项目

时间:2019-01-04 11:15:57

标签: python pandas dataframe expand

我有一个包含所有订单,客户和订单项信息的数据集。我希望在新的列中扩展订单项,但又不会丢失有关客户的信息

CustomerId    OrderId    Item
1    1    CD
1    1    DVD
2    2    CD

结果应该是某种方式:

CustomerId    OrderId    CD    DVD
1    1    1    1
2    2    1    0

我尝试了

df2 = pd.concat([df, pd.get_dummies(df.Item)], axis='columns')
df2 = df2.groupby('CustomerId')

1 个答案:

答案 0 :(得分:4)

更简单的是crosstab;

pd.crosstab([df.CustomerId, df.OrderId], df.Item).reset_index()

   CustomerId  OrderId  CD  DVD
0           1        1   1    1
1           2        2   1    0

或者,pivot_table 如果性能很重要

df.pivot_table(index=['CustomerId', 'OrderId'], 
               columns=['Item'], 
               aggfunc='size', 
               fill_value=0)

Item                CD  DVD
CustomerId OrderId         
1          1         1    1
2          2         1    0

如果您要使用假人,str.get_dummies是另一种选择:

# Solution similar to @jezrael but with str.get_dummies
(df.set_index(['CustomerId', 'OrderId'])
   .Item.str.get_dummies()
   .sum(level=[0, 1])
   .reset_index())

   CustomerId  OrderId  CD  DVD
0           1        1   1    1
1           2        2   1    0

如果需要指示器,

(df.set_index(['CustomerId', 'OrderId'])
   .Item.str.get_dummies()
   .max(level=[0, 1])
   .reset_index())