熊猫在数据框中的两列中找到交叉销售

时间:2020-02-07 01:52:13

标签: python pandas

我想做的是一种交叉销售。

我有一个Pandas数据框,其中有两列,一列具有收据编号,另一列具有产品ID:

receipt  product
1        a
1        b
2        c
3        b
3        a

大多数收据有很多产品。我需要查找的是收据中出现的产品组合数量。假设产品“ a”和“ b”是最常见的组合(它们一起出现在大多数收据中),如何找到此信息?

我尝试使用df.groupby(['receipt','product']).count(),但这仅带给我收据+产品组合的数量,而不是每张收据中产品关系的数量。

感谢您的帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

我认为这就是您要寻找的

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

答案 1 :(得分:1)

我认为您可以进行交叉合并:

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