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

如何用Pandas基于关联ID填充DataFrame中派生项的缺失标签?

Pandas实现派生项标签填充方案

核心思路

先从原数据中提取**主项(无Derived Item ID的行)**的Main Item ID与对应标签的映射关系,再通过派生项的Derived Item ID关联主项ID,将标签批量填充到派生项的空标签字段中。

步骤实现

1. 构建示例数据集

先还原你提供的示例数据:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'Bucket': [26, 26],
    'Main Item ID': [123, 765],
    'Item Name': ['Item A', 'Item A (Derived)'],
    'Item Tag 1': [50, np.nan],
    'Item Tag 2': [1000, np.nan],
    'Item Tag 3': [250, np.nan],
    'Derived Item ID': [np.nan, 123]
})

2. 创建主项标签映射表

筛选出所有主项(Derived Item ID为空的行),提取Main Item ID和所有标签列,将Main Item ID设为索引,方便后续快速匹配:

# 提取主项的ID-标签映射
tag_mapping = df[df['Derived Item ID'].isna()].set_index('Main Item ID')[['Item Tag 1', 'Item Tag 2', 'Item Tag 3']]

3. 批量填充派生项标签

通过Derived Item ID关联映射表,将匹配到的标签填充到原DataFrame的空标签字段:

# 定位派生项行,用Derived Item ID匹配映射表中的标签
derived_mask = df['Derived Item ID'].notna()
df.loc[derived_mask, ['Item Tag 1', 'Item Tag 2', 'Item Tag 3']] = df.loc[derived_mask, 'Derived Item ID'].map(tag_mapping.to_dict('index')).apply(pd.Series)

验证结果

执行上述代码后,输出df即可得到期望结果:

Bucket  Main Item ID       Item Name  Item Tag 1  Item Tag 2  Item Tag 3  Derived Item ID
0      26           123          Item A        50.0      1000.0       250.0              NaN
1      26           765  Item A (Derived)        50.0      1000.0       250.0            123.0

补充说明

  • 该方法用Pandas向量化操作替代低效for循环,适合处理大规模数据
  • 若存在多Bucket场景(不同Bucket下可能有重复Main Item ID),可构建复合索引确保匹配准确性:
# 多Bucket场景下的映射表
tag_mapping = df[df['Derived Item ID'].isna()].set_index(['Bucket', 'Main Item ID'])[['Item Tag 1', 'Item Tag 2', 'Item Tag 3']]

# 多Bucket场景下的填充
df.loc[derived_mask, ['Item Tag 1', 'Item Tag 2', 'Item Tag 3']] = df.loc[derived_mask, ['Bucket', 'Derived Item ID']].apply(lambda x: tag_mapping.loc[(x['Bucket'], x['Derived Item ID'])], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:35:05