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

Pandas如何基于0/1标记列生成字符串标签列表列并构建目标数据框

解决方案

完整实现代码

import pandas as pd

# 若你已经读取了数据到df变量,可直接跳过样例构造部分
df = pd.DataFrame([
    ['c24a1b14d253.jpg', 0, 1, 1],
    ['9ee905a41651.jpg', 0, 0, 1],
    ['3f58d128caf6.jpg', 0, 1, 0],
    ['4ce6599e7b20.jpg', 0, 0, 1],
    ['0def470360e4.jpg', 0, 0, 1]
], columns=['filename', 'diabetic retinopathy', 'glaucoma', 'others'])

# 筛选所有标签列(排除filename列)
label_cols = df.columns.drop('filename')

# 生成labels列:逐行提取值为1的列名转为列表
df['labels'] = df.apply(lambda row: label_cols[row == 1].tolist(), axis=1)

# 生成仅保留filename和labels的新数据框
result_df = df[['filename', 'labels']]

输出结果示例

运行后打印result_df可得到符合要求的结果:

filename               labels
0  c24a1b14d253.jpg  [glaucoma, others]
1  9ee905a41651.jpg            [others]
2  3f58d128caf6.jpg          [glaucoma]
3  4ce6599e7b20.jpg            [others]
4  0def470360e4.jpg            [others]

代码说明

  • df.columns.drop('filename') 会自动排除文件名列,后续如果新增其他疾病标签列也不需要手动修改这段代码
  • apply 方法中指定axis=1表示按行处理数据,对每一行用布尔索引筛选出值为1的对应列名,转为列表后赋值给labels列
  • 最后直接提取指定两列即可得到目标数据框

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:15:02