Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将订单与列中的项目合并_Python_Pandas_Dataframe_Expand - Fatal编程技术网

Python 将订单与列中的项目合并

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

我有一个包含所有订单、客户和订单项信息的数据集。我不想在新列中扩展我的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.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())