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

求助:标注数据同字符串多Span合并及目标格式DataFrame生成

解决标注数据的DataFrame合并与格式化问题

问题核心

处理标注人员对同一字符串位置的Span标注差异(如"Hello"与"Hello,"被识别为不同条目),需按start值合并相似Span(保留首个文本),新增string_num列存储start值,生成目标格式的DataFrame。

数据与示例

初始数据片段

data = [
    {"text": "Hello", "start": 0, "label1": "Greeting", "label2": "", "label3": "Greeting"},
    {"text": "Hello,", "start": 0, "label1": "", "label2": "Greeting", "label3": ""},
    {"text": "World", "start": 6, "label1": "Entity", "label2": "Entity", "label3": ""}
]

当前错误输出

textstartlabel1label2label3
Hello0GreetingGreeting
Hello,0Greeting
World6EntityEntity

期望输出

textstring_numlabel1label2label3
Hello0GreetingGreetingGreeting
World6EntityEntity

修正后的代码

import pandas as pd

# 标注数据
data = [
    {"text": "Hello", "start": 0, "label1": "Greeting", "label2": "", "label3": "Greeting"},
    {"text": "Hello,", "start": 0, "label1": "", "label2": "Greeting", "label3": ""},
    {"text": "World", "start": 6, "label1": "Entity", "label2": "Entity", "label3": ""}
]

df = pd.DataFrame(data)

# 定义分组处理逻辑
def merge_span(group):
    # 保留组内第一个文本
    merged_text = group["text"].iloc[0]
    # 提取所有label列
    label_columns = [col for col in group.columns if col.startswith("label")]
    # 处理每个label列,取首个非空值
    label_results = {}
    for col in label_columns:
        non_empty_vals = group[col][group[col] != ""].dropna()
        label_results[col] = non_empty_vals.iloc[0] if not non_empty_vals.empty else ""
    
    # 构造结果行
    return pd.Series({
        "text": merged_text,
        "string_num": group["start"].iloc[0],
        **label_results
    })

# 按start分组并应用合并逻辑
final_df = df.groupby("start", as_index=False).apply(merge_span).reset_index(drop=True)

# 输出结果
print(final_df)

代码说明

  1. 分组逻辑:通过groupby("start")将同一位置的Span归为一组,确保同一字符串位置的标注被合并
  2. 文本保留:每组取第一个text值作为合并后的展示文本,解决Span差异问题
  3. Label合并:对每个label列,提取组内首个非空标注值,空值则保留空字符串,完整保留所有标注人员的有效结果
  4. 新增列:将start值存入string_num列,满足格式需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:40:24