pandas 创建一个新的项目对列

pandas create a new column of item pairs

我有一个这样的数据框:

订单号 产品 购买日期
123 一个 08/05/2021
123 B 08/05/2021
123 C 08/05/2021
123 D 08/05/2021
245 B 11/05/2021
245 C 11/05/2021
245 一个 11/05/2021
... ... ...

我想创建一个产品对列,这样我的新 df 将是:

订单号 产品对 购买日期
123 A,B 08/05/2021
123 B,C 08/05/2021
123 C,D 08/05/2021
123 A,C 08/05/2021
123 B,D 08/05/2021
... ... ...

知道如何用 pandas 做到这一点吗?

IIUC 尝试 groupby agg + itertools.combinations + explode:

from itertools import combinations

new_df = (
    df.groupby(['orderID', 'PurchaseDate'])['Product']
        .agg(lambda p: list(combinations(p, 2)))
        .explode()
        .str.join(',')
        .reset_index(name='ProductPairs')
)

new_df:

   orderID PurchaseDate ProductPairs
0      123   08/05/2021          A,B
1      123   08/05/2021          A,C
2      123   08/05/2021          A,D
3      123   08/05/2021          B,C
4      123   08/05/2021          B,D
5      123   08/05/2021          C,D
6      245   11/05/2021          B,C
7      245   11/05/2021          B,A
8      245   11/05/2021          C,A