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

如何合并pandas DataFrame重复行以构建多标签分类训练数据集

多标签重复行合并解决方案

pandas 原生功能完全可以实现你的需求,核心逻辑是按文章唯一标识分组后对所有标签列取最大值,0/1值的max()运算刚好可以把同一篇文章所有出现过的标签位都保留为1,未出现的保留为0。

前置准备

首先确认你的 DataFrame 包含以下几类字段:

  • 唯一标识字段:比如article_id、文章标题、正文哈希值,用来识别同一篇文章
  • 文本特征字段:比如content,存储新闻正文/标题等用来训练的文本内容
  • 6个标签字段:比如label1~label6,取值均为0或1

核心实现代码

第一步:构造模拟测试数据(匹配你提到的重复场景)

import pandas as pd

# 模拟你当前的重复标注数据,其中文章2符合两个标签的检索条件,存在两条重复行
raw_data = {
    "article_id": [1, 2, 2, 3],
    "content": ["新闻1正文内容", "新闻2正文内容", "新闻2正文内容", "新闻3正文内容"],
    "label1": [1, 1, 0, 0],
    "label2": [0, 0, 1, 1],
    "label3": [0, 0, 0, 0],
    "label4": [0, 0, 0, 0],
    "label5": [0, 0, 0, 0],
    "label6": [0, 0, 0, 0]
}
df = pd.DataFrame(raw_data)

第二步:合并重复行、整合多标签

方案1:手动指定标签列(适合标签列名固定的场景)

# 定义所有标签列的列表
label_columns = ["label1", "label2", "label3", "label4", "label5", "label6"]
# 按文章唯一标识+文本字段分组,对标签列取最大值
merged_df = df.groupby(["article_id", "content"], as_index=False)[label_columns].max()

方案2:自动识别标签列(适合标签列命名有统一规律的场景)

如果你的标签列都以固定前缀命名(比如都以label开头),可以不用手动列全所有标签:

# 自动筛选所有以label开头的标签列
label_columns = [col for col in df.columns if col.startswith("label")]
merged_df = df.groupby(["article_id", "content"], as_index=False)[label_columns].max()

效果说明

处理后的merged_df中,同一篇文章只会保留一条记录,所有符合检索条件的标签位都会设为1,不符合的保留0,完全匹配你需要的多标签整合需求。

注意事项

  • 如果没有单独的article_id字段,可以用hash(content)生成正文的哈希值作为唯一标识,避免内容完全相同的文章被判定为不同条目
  • 如果存在部分文章没有命中任何标签的检索条件,处理后所有标签位都会保留为0,符合你的业务要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:24:01