熊猫-尝试基于通用密钥将多行数据合并为单行

时间:2020-05-06 19:22:45

标签: pandas

我具有以下格式的数据框:

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

1 个答案:

答案 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

注意:数据透视表始终对列名进行排序,因此输出数据框的列名已排序