是否有一种最佳方法可以在分组的Pandas数据框中获取所有值组合?
示例数据框如下
df = pd.DataFrame({'ID': ['a', 'a', 'a', 'b', 'b', 'c', 'c'],
'color': ['red', 'blue', 'green', 'red', 'blue', 'red', 'green']})
在按 ID 分组后,我想要 2 列包含颜色字段的所有组合。
我想要如下所示的结果数据框
| ID | 颜色 1 | 颜色2 |
|---|---|---|
| 一种 | 红色的 | 蓝色 |
| 一种 | 红色的 | 绿色 |
| 一种 | 蓝色 | 红色的 |
| 一种 | 蓝色 | 绿色 |
| 一种 | 绿色 | 红色的 |
| 一种 | 绿色 | 蓝色 |
| 乙 | 红色的 | 蓝色 |
| 乙 | 蓝色 | 红色的 |
| C | 红色的 | 绿色 |
| C | 绿色 | 红色的 |
回答
我认为您可以进行自我合并和查询:
df.merge(df, on='ID', suffixes=[1,2]).query('color1 != color2')
或类似的,合并然后过滤:
(df.merge(df, on='ID', suffixes=[1,2])
.loc[lambda x: x['color1'] != x['color2']]
)
输出:
ID color1 color2
1 a red blue
2 a red green
3 a blue red
5 a blue green
6 a green red
7 a green blue
10 b red blue
11 b blue red
14 c red green
15 c green red