Pandas DataFrame未知列名时合并二值列取行最大值方法
需求说明
需要实现通用的DataFrame二值列合并逻辑:
- 对每组重复的二值列逐行取最大值,合并为单列
- 不需要预先知晓待合并的列名,可直接嵌入通用循环批量处理多组重复列
现有上下文
相关变量与前置逻辑如下:
- 重复问题映射字典
duplicates_binary_questions = { "question" : [114, 155] }:键为合并后统一使用的列名/问题标识,值为该组下所有重复问题的ID列表 - 全量数据存储在主DataFrame
data中,问题列的命名规则为问题ID_业务后缀格式 - 已实现列筛选逻辑:通过匹配列名中下划线前的ID前缀,筛出当前组所有重复列构成子数据集
sub_data_binary,对应代码:
for key, value in duplicates_binary_questions.items(): value = [str(x) for x in value] sub_data_binary = data[ data.columns[np.isin([x[: x.find("_")] for x in data.columns], value)] ]
实现方案
直接调用pandas的行维度最大值计算方法即可完成逐行取最大值的逻辑,之前调用该方法报错的核心原因是:没有为生成的结果序列指定统一列名,导致无法顺利合并回主DataFrame。
完整可运行代码如下:
import numpy as np duplicates_binary_questions = { "question" : [114, 155] } for key, value in duplicates_binary_questions.items(): value = [str(x) for x in value] # 筛选当前组所有二值列 sub_data_binary = data[ data.columns[np.isin([x[: x.find("_")] for x in data.columns], value)] ] # 逐行取最大值,结果直接以字典键作为列名写入主DataFrame data[key] = sub_data_binary.max(axis=1)
注意:如果待合并的二值列存在空值,可先调用sub_data_binary.fillna(0).max(axis=1)做填充处理,避免空值导致结果异常。
内容的提问来源于stack exchange,提问作者Daj
相关产品推荐
相关产品推荐

