如何为每个类别生成所有唯一的物品配对列表?
输入表格
| 类别 | 物品 |
|---|---|
| A | 1 |
| A | 3 |
| A | 4 |
| B | 1 |
| B | 2 |
| C | 4 |
| C | 5 |
期望输出表格
| 类别 | 物品1 | 物品2 |
|---|---|---|
| A | 1 | 3 |
| A | 1 | 4 |
| A | 3 | 4 |
| B | 1 | 2 |
| C | 4 | 5 |
解决方法
方法1:Excel/Power Query 实现
- 选中输入数据区域,点击「数据」选项卡 →「从表格/区域」,导入Power Query编辑器
- 点击「添加列」→「自定义列」,输入公式:
=Table.SelectRows(源, (x) => x[类别] = [类别] and x[物品] > [物品]),这一步用来筛选当前类别中比当前物品数值大的所有物品,避免生成重复配对(比如1&3和3&1只留前者) - 点击自定义列右侧的展开按钮,仅选择「物品」列,并重命名为「物品2」
- 保留「类别」「物品」「物品2」列,将「物品」重命名为「物品1」
- 点击「关闭并上载」,即可得到目标配对列表
方法2:Python 代码实现
用pandas库可以快速处理这类分组配对需求:
import pandas as pd # 构建输入数据 df = pd.DataFrame({ '类别': ['A', 'A', 'A', 'B', 'B', 'C', 'C'], '物品': [1, 3, 4, 1, 2, 4, 5] }) # 生成每个类别内的唯一配对 result = [] for category in df['类别'].unique(): items = df[df['类别'] == category]['物品'].tolist() # 遍历所有i<j的组合,确保配对唯一无重复 for i in range(len(items)): for j in range(i + 1, len(items)): result.append({'类别': category, '物品1': items[i], '物品2': items[j]}) # 转换为结果表格 result_df = pd.DataFrame(result) print(result_df)
运行代码后输出的result_df就是你需要的配对列表。
内容的提问来源于stack exchange,提问作者DanPo
相关产品推荐
相关产品推荐

