Pandas中如何跨多列检查不同条件并拼接满足条件的列名
pandas多列独立条件拼接列名实现方案
不需要创建三个持久化的辅助列,直接为每列配置独立判定规则就能完成D列的计算。
简洁版实现(适配小体量数据集)
直接在逐行apply的逻辑中为三列分别配置判定规则,筛选出符合条件的列名后用逗号拼接即可,代码如下:
df['D'] = df[['A', 'B', 'C']].apply( lambda row: ','.join([ col for col, match in [ ('A', row['A'] == 0), ('B', row['B'] > 30), ('C', row['C'] == 'Pass') ] if match ]), axis=1 )
- 三列条件同时命中时,D列返回
A,B,C - 仅命中A、B列条件时,D列返回
A,B - 其他命中场景会自动拼接对应列名,无需手写多分支判断
高性能实现(适配大体量数据集)
如果你的数据集行数较多,优先使用pandas向量化运算替代逐行apply,运行效率会有明显提升:
# 构建三列的判定布尔矩阵 cond_df = pd.DataFrame({ 'A': df['A'] == 0, 'B': df['B'] > 30, 'C': df['C'] == 'Pass' }) # 逐行拼接命中条件的列名 df['D'] = cond_df.apply(lambda row: ','.join(row.index[row]), axis=1)
你之前的代码局限性在于给所有列套用了
eq(1)的统一判定规则,只要把统一规则替换为每列独立的判定逻辑,就可以跳过繁琐的辅助列创建步骤,直接得到目标结果。
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

