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

多标签图像分类任务中,如何为DataFrame生成含标签列表的新列?

解决多标签图像分类任务中DataFrame新增聚合标签列的问题

问题场景

你有包含id和labels两列的DataFrame,需要新增all_labels列:当id存在重复时,将该id对应的所有标签以列表形式填入该列的首行,其余重复行的all_labels留空。

解决方案(基于Pandas)

以下是可直接复用的代码步骤:

  1. 导入依赖并创建示例DataFrame
import pandas as pd

# 模拟你的原始数据
df = pd.DataFrame({
    'id': ['x.jpg', 'x.jpg', 'y.jpg', 'z.jpg', 'z.jpg'],
    'labels': ['label_1', 'label_2', 'label_a', 'label_x', 'label_y']
})
  1. 生成每个id对应的标签列表映射
    通过groupby聚合每个id下的所有标签为列表:
# 建立id到对应标签列表的映射
id_to_labels = df.groupby('id')['labels'].apply(list)
  1. 合并映射到原DataFrame并处理空值
    先将映射关联到原表,再通过分组保留每组首行的标签列表,其余行设为空:
# 先给所有行添加对应的标签列表
df['all_labels'] = df['id'].map(id_to_labels)
# 仅保留每个id组的第一行的标签列表,其余行置空
df['all_labels'] = df.groupby('id')['all_labels'].transform(lambda x: x.iloc[0] if len(x) > 1 else None)

最终效果

处理后的DataFrame如下:

idlabelsall_labels
x.jpglabel_1['label_1', 'label_2']
x.jpglabel_2NaN
y.jpglabel_aNone
z.jpglabel_x['label_x', 'label_y']
z.jpglabel_yNaN

补充说明

  • 如果你希望所有重复id的行都显示完整标签列表,只需跳过第三步,保留第二步的结果即可。
  • 若你的DataFrame中id的重复顺序有特殊要求,可先对id和其他列排序后再执行上述步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:25:39