我具有以下格式的数据框:
cust_id, sales
101, apple:1
101, banana:2
102, apple:1
103, apple:3
103, banana:5
103, apple:7
我试图将cust_id的所有销售数据包含在一行中。有时,相同的ust_id也可以针对同一产品进行多次销售。对于这些条目,我想创建一个新列。
这是我期望最终输出是这样的方式:
cust_id, apple, banana, apple
101, 1, 2
102, 1,
103, 3, 5, 7
答案 0 :(得分:2)
您需要将sales
列拆分为多列。使用groupby.cumcount
分隔重复的名称,并使用pd.crosstab
获得最终结果
df1 = df.set_index('cust_id').sales.str.split(':', expand=True)
s = df1.groupby(['cust_id', 0]).cumcount().astype(str).replace('0','')
df_final = pd.crosstab(df1.index, df1[0]+s, df1[1], aggfunc='first')
Out[111]:
col_0 apple apple1 banana
row_0
101 1 None 2
102 1 None None
103 3 7 5
注意:数据透视表始终对列名进行排序,因此输出数据框的列名已排序