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

Pandas如何为每行生成值为Y的对应列名组成的列表新列

实现方案

方案1:易读的行遍历方案(适合小体量数据)

核心代码通过apply按行处理实现,逻辑直观好理解:

df['col6'] = df.apply(lambda row: [col for col in df.columns if row[col] == 'Y'], axis=1)

逻辑说明:指定axis=1逐行遍历,对每行依次判断所有列的取值是否为Y,符合条件的列名直接存入列表,赋值给新列即可。

方案2:向量化高性能方案(适合十万行以上的大体量数据)

避免apply的Python级循环开销,用Pandas原生矩阵运算实现,性能提升明显:

# 生成值为Y的布尔掩码矩阵
mask = df.eq('Y')
# 矩阵点乘列名拼接后拆分得到列表
df['col6'] = mask.dot(mask.columns + ',').str.rstrip(',').str.split(',')

效果验证示例

你可以用以下代码构造示例数据测试效果:

import pandas as pd
# 构造和你示例一致的DataFrame
df = pd.DataFrame({
    'col1': ['Y', 'Y', 'N'],
    'col2': ['N', 'N', 'N'],
    'col3': ['N', 'Y', 'Y'],
    'col4': ['N', 'Y', 'N'],
    'col5': ['Y', 'Y', 'N']
}, index=['a', 'b', 'c'])

# 执行方案1
df['col6'] = df.apply(lambda row: [col for col in df.columns if row[col] == 'Y'], axis=1)
print(df)

运行后输出和你预期的结果完全一致。

内容的提问来源于stack exchange,提问作者user14380579

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:48:03