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
我有一个这样的数据框:
订单号 | 产品 | 购买日期 |
---|---|---|
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