我有以下格式的数据框:
cust_id, sales
101, apple:1
101, banana:2
102, apple:1
103, apple:3
103, banana:5
103, apple:7
我正在尝试将 cust_id 的所有销售数据放在一行中。有时同一个 cust_id 也可以有同一个产品的多个销售。对于此类条目,我想创建一个新列。
这就是我期望的最终输出:
cust_id, apple, banana, apple
101, 1, 2
102, 1,
103, 3, 5, 7
最佳答案
您需要将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
注意:透视表总是对列名进行排序,因此输出数据框的列名已排序
关于Pandas - 尝试根据公共(public)键将来自多行的数据组合成一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61643635/