如何用Pandas将值为True的_flag列名合并至新列?
Pandas 实现每行True值对应_flag列名合并
问题场景
现有如下Pandas DataFrame代码:
import pandas as pd import numpy as np a= dict() a['name']=['test','test1'] a['a_flag']=[True,True] a['b_flag']=[True,False] a['c_flag']=[True,False] a['d_flag']=[True,True] df = pd.DataFrame(a) col_flag = df.filter(like='_flag')
需求:仅筛选名称包含_flag的列,将每行中值为True的对应列名合并到新列中。
实现方案
方法一:apply + 列表推导式(直观易懂)
通过apply逐行处理,筛选出当前行值为True的列名,再用逗号拼接成字符串:
df['flag_combined'] = col_flag.apply(lambda row: ','.join([col for col, val in row.items() if val]), axis=1)
方法二:dot矩阵乘法(高效适合大数据集)
利用矩阵乘法的特性,直接匹配True值对应的列名,最后去除末尾多余的分隔符:
df['flag_combined'] = col_flag.dot(col_flag.columns + ',').str.rstrip(',')
最终效果
执行后DataFrame新增flag_combined列,结果示例:
| name | a_flag | b_flag | c_flag | d_flag | flag_combined |
|---|---|---|---|---|---|
| test | True | True | True | True | a_flag,b_flag,c_flag,d_flag |
| test1 | True | False | False | True | a_flag,d_flag |
内容的提问来源于stack exchange,提问作者Clarence Chhoa
相关产品推荐
相关产品推荐

