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

基于参考数据集的标签条件替换实现方案问询

数据集标签替换方案实现

现有数据集

第一个数据集(df1)

ID          Label      
0001        0001_1   
0001        0001_1   
0001        0001_1   
0001        0001_1   
0001        0001_1   
0001        0001_1   
0002        0002_1   
0002        0002_1  
0002        0002_2
0002        0002_2
0002        0002_3
0002        0002_3   

第二个数据集(df2)

ID          Label      
0001        0001_1   
0001        0001_1   
0001        0001_2   
0001        0001_2   
0001        0001_3   
0001        0001_3   
0002        0002_1   
0002        0002_1  
0002        0002_2
0002        0002_2
0002        0002_3
0002        0002_3  

需求说明

  • 若第一个数据集中某ID对应的Label仅有一种类型(如ID0001的Label为0001_1),则将第二个数据集中该ID的所有Label替换为该类型
  • 若该ID对应多种Label类型,则不做任何处理

期望输出数据集

ID          Label      
0001        0001_1   
0001        0001_1   
0001        0001_1   
0001        0001_1   
0001        0001_1   
0001        0001_1  
0002        0002_1   
0002        0002_1  
0002        0002_2
0002        0002_2
0002        0002_3
0002        0002_3   

实现方案(Python pandas)

以下是基于pandas的高效实现代码,逻辑清晰易维护:

import pandas as pd

# 1. 构造或读取数据集(如果是外部文件,替换为pd.read_csv/pd.read_excel)
df1 = pd.DataFrame({
    'ID': ['0001']*6 + ['0002']*6,
    'Label': ['0001_1']*6 + ['0002_1']*2 + ['0002_2']*2 + ['0002_3']*2
})

df2 = pd.DataFrame({
    'ID': ['0001']*6 + ['0002']*6,
    'Label': ['0001_1']*2 + ['0001_2']*2 + ['0001_3']*2 + ['0002_1']*2 + ['0002_2']*2 + ['0002_3']*2
})

# 2. 提取第一个数据集中单标签ID的映射关系
# 统计每个ID的唯一标签数,同时获取该标签值
id_label_stats = df1.groupby('ID')['Label'].agg(unique_count='nunique', target_label='first').reset_index()
# 筛选出只有一种标签的ID
single_label_map = id_label_stats[id_label_stats['unique_count'] == 1][['ID', 'target_label']]

# 3. 对第二个数据集进行标签替换
# 合并映射表,保留所有df2的行
merged_df = df2.merge(single_label_map, on='ID', how='left')
# 替换逻辑:有映射值则替换,无则保留原标签
merged_df['Label'] = merged_df.apply(lambda row: row['target_label'] if pd.notna(row['target_label']) else row['Label'], axis=1)
# 移除临时列
result_df = merged_df.drop(columns=['target_label'])

# 4. 输出结果(或保存到文件:result_df.to_csv('output.csv', index=False))
print(result_df)

代码逻辑说明

  • 第一步:通过groupby统计每个ID的唯一标签数量,同时取第一个标签(单标签ID的所有标签一致,取第一个即可)
  • 第二步:筛选出仅有一种标签的ID,建立ID到目标标签的映射表
  • 第三步:将映射表与第二个数据集合并,通过apply完成标签替换,仅处理符合条件的ID
  • 第四步:输出或保存处理后的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:50:20