我想做的是一种交叉销售。
我有一个包含两列的 Pandas 数据帧,一列包含收据编号,另一列包含产品 ID:
receipt product
1 a
1 b
2 c
3 b
3 a
大多数收据都有很多产品。我需要找到的是收据中发生的产品组合的数量。假设产品"a"和"b"是最常见的组合(它们一起出现在大多数收据中(,我如何找到此信息?
我尝试使用df.groupby(['receipt','product']).count()
但这只给我带来了收据+产品的组合计数,而不是每个收据的产品关系计数。
任何帮助都是可用的,谢谢!
我认为这就是你要找的
df.groupby(['receipt']).agg({'product': list}).assign(count=lambda x: x['product'].str.len())
product count
receipt
1 [a, b] 2
2 [c] 1
3 [b, a] 2
我认为你可以进行交叉合并:
new_df = df.merge(df, on='receipt')
(new_df[new_df['product_x'] < new_df['product_y']]
.groupby(['product_x','product_y'])['receipt'].count()
)
输出:
product_x product_y
a b 2
Name: receipt, dtype: int64