基于DataFrame的Flag列与指定布尔列列表生成Test列的需求
Pandas DataFrame 生成Test列解决方案
实现思路
- 逐行提取
col_list中值为True的列名,将这些列名用下划线拼接成字符串 - 结合
Flag列的取值和拼接字符串是否为空,按规则生成Test列的值
代码实现
import pandas as pd # 定义目标列列表 col_list = ['col1', 'col2', 'col3', 'col4', 'col8'] # 构造示例DataFrame data = { 'col1': [True, False, False, False], 'col2': [False, True, False, False], 'col3': [False, False, False, False], 'col4': [False, True, False, False], 'col8': [True, False, False, False], 'Flag': [True, False, True, False] } df = pd.DataFrame(data) # 生成每行True列名的拼接字符串(首字母大写,匹配示例格式) df['true_cols'] = df[col_list].apply( lambda row: '_'.join(row[row].index.str.capitalize()), axis=1 ) # 按规则生成Test列 df['Test'] = df.apply( lambda row: 'XET' if not row['Flag'] and row['true_cols'] == '' else 'Recheck' if row['Flag'] and row['true_cols'] == '' else f'XET_{row["true_cols"]}' if not row['Flag'] else row['true_cols'], axis=1 ) # 可选:删除临时辅助列 # df.drop('true_cols', axis=1, inplace=True) # 打印结果 print(df)
输出示例
运行代码后得到的结果:
col1 col2 col3 col4 col8 Flag true_cols Test 0 True False False False True True Col1_Col8 Col1_Col8 1 False True False True False False Col2_Col4 XET_Col2_Col4 2 False False False False False True Recheck 3 False False False False False False XET
注意事项
- 确保
col_list中的所有列都是布尔类型(True/False),若存在非布尔值,需先通过df[col_list] = df[col_list].astype(bool)转换类型 - 若不需要列名首字母大写,删除代码中的
.str.capitalize()即可 - 可以将两步
apply合并为一步以减少临时列,拆分写法更易理解和调试
内容的提问来源于stack exchange,提问作者Θοδωρής Πάλλης
相关产品推荐
相关产品推荐

