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

如何在Pandas中根据DataFrame值为1的列生成列名列表新列?

解决方案

可以通过pandas.DataFrame.apply逐行处理数据,筛选出每行中值为1的列名,再根据数量返回对应格式的结果:

import pandas as pd
import numpy as np

# 初始化原始DataFrame
df = pd.DataFrame({'type_a': [1,0,0,0,0,1,0,0,0,1],
                   'type_b': [0,1,0,0,0,0,0,0,1,1],
                   'type_c': [0,0,1,1,1,1,0,0,0,0],
                   'type_d': [1,0,0,0,0,1,1,0,1,0],
                  })

# 生成目标列'type'
df['type'] = df.apply(
    lambda row:
    # 多列值为1时返回列名列表
    list(row[row == 1].index) if len(row[row == 1]) > 1
    # 单列为1时返回列名字符串
    else row[row == 1].index[0] if len(row[row == 1]) == 1
    # 无列值为1时返回nan
    else np.nan,
    axis=1  # 指定按行处理
)

运行后得到的df与期望输出完全一致:

  • 单行多列值为1时,返回列名组成的列表(如第一行['type_a','type_d'])
  • 单行仅一列值为1时,返回单个列名字符串(如第二行type_b)
  • 无列值为1时,返回np.nan(如第七行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:45:49