You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于DataFrame的Flag列与指定布尔列列表生成Test列的需求

Pandas DataFrame 生成Test列解决方案

实现思路

  1. 逐行提取col_list中值为True的列名,将这些列名用下划线拼接成字符串
  2. 结合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,提问作者Θοδωρής Πάλλης

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 23:47:10