Python 将订单与列中的项目合并
我有一个包含所有订单、客户和订单项信息的数据集。我不想在新列中扩展我的orderitems,但不会丢失有关客户的信息Python 将订单与列中的项目合并,python,pandas,dataframe,expand,Python,Pandas,Dataframe,Expand,我有一个包含所有订单、客户和订单项信息的数据集。我不想在新列中扩展我的orderitems,但不会丢失有关客户的信息 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
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')
更简单的是
或者,如果性能很重要,
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
如果要使用假人,另一个选项是:
# 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())
像这样:
pd.crosstab([df.CustomerId,df.OrderId],df.Item.).reset_index()
我有点好奇-你需要计算重复的值,或者在输出中需要0,1
?@jezrael在走上高速路之前,请记住这是重复的。我重新打开它并回答,因为您没有删除您的答案。是的,原因是我认为OP需要其他东西,但我错了,清除重复。。。
(df.set_index(['CustomerId', 'OrderId'])
.Item.str.get_dummies()
.max(level=[0, 1])
.reset_index())