如何在Pandas中基于多列值组合查找匹配目标值的列组合
实现方案
核心思路
逐行生成所有非空列名组合,计算组合对应列的数值和,筛选出和等于目标值的组合即可,全程仅读取原DataFrame数据,不会修改原始内容。
实现代码
import pandas as pd import numpy as np from itertools import combinations # 目标和可按需调整 TARGET_SUM = 9 # 提前提取列名避免重复计算 cols = df.columns.tolist() col_count = len(cols) def match_column_combination(row): matched = [] # 遍历所有长度的列组合(从单列到全部列) for length in range(1, col_count + 1): for combo in combinations(cols, length): if sum(row[col] for col in combo) == TARGET_SUM: matched.append(list(combo)) # 无匹配返回False,有匹配返回所有组合列表 return matched if matched else False # 逐行处理得到结果 result = df.apply(match_column_combination, axis=1)
输出验证
你可以直接打印result查看每行的匹配结果,和要求的输出规则完全一致:
- 行0输出:
[['One', 'Two']] - 行1输出:
[['One', 'Two'], ['One', 'Three'], ['One', 'Four']] - 行2输出:
False - 行3输出:
[['Four']]
优化说明
如果你的DataFrame列数较多,可以增加剪枝逻辑:组合求和过程中如果已经超过目标值,直接跳过后续更长的包含该组合的计算,可大幅提升运算效率。
内容的提问来源于stack exchange,提问作者Akmal Soliev
相关产品推荐
相关产品推荐

