如何在pandas DataFrame中查找所有可能组合并计算对应总和
Pandas实现DataFrame所有多元素组合求和方案
核心思路
- 基于组合生成逻辑,遍历所有元素个数≥2的Sno值组合,排除单元素场景
- 对每个组合匹配对应的No字段值做求和计算
- 将组合内Sno用逗号拼接、对应求和结果组装为新行,最终合并为结果DataFrame
完整实现代码
import pandas as pd from itertools import combinations # 示例输入数据 df = pd.DataFrame({ 'Sno': ['A', 'B', 'C'], 'No': [1, 2, 3] }) res_list = [] # 组合长度从2开始,覆盖到所有元素的全组合 for length in range(2, len(df) + 1): # 生成对应长度的所有索引组合 for idx_group in combinations(df.index, length): group_data = df.loc[list(idx_group)] res_list.append({ 'Sno': ','.join(group_data['Sno']), 'No': group_data['No'].sum() }) # 转换为输出DataFrame result_df = pd.DataFrame(res_list)
运行结果
执行代码后得到的result_df完全匹配预期输出:
Sno No 0 A,B 3 1 A,C 4 2 B,C 5 3 A,B,C 6
适配说明
- 方案自动适配任意行数的输入DataFrame,无需手动调整组合长度
- 若需要包含单元素的组合结果,仅需将组合长度遍历的起始值从
2改为1即可 - 组合为无重复的无序组合,不会出现A,B和B,A重复计算的问题
内容的提问来源于stack exchange,提问作者Gurpreet
相关产品推荐
相关产品推荐

