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

基于多条件按ID映射pandas DataFrame的Code列值

解决方案:按ID批量替换Pandas DataFrame的Code列值

需求回顾

针对含10万行的DataFrame,按ID规则替换Code列:

  • 若某ID同时关联Code name和Code ID,该ID所有行的Code替换为Code ID对应的数值
  • 若ID仅关联一种类型,保持原Code值不变

示例数据

import pandas as pd

df = pd.DataFrame({'ID' : ['ID 1', 'ID 1', 'ID 1', 'ID 2', 'ID 2', 'ID 3', 'ID 3'],
                   'Code' : ['Apple', 'A123', 'Apple', 'Banana', 'Banana', 'K123', 'K123'],
                   'Code_Type' : ['Code name', 'Code ID', 'Code name', 'Code name', 'Code name', 'Code ID', 'Code ID']}
                 )

步骤1:生成目标映射字典

通过分组聚合判断每个ID的类型集合,生成ID到目标Code值的映射:

# 按ID分组,统计每个ID的Code类型集合和Code值列表
id_grouped = df.groupby('ID').agg(
    code_types=('Code_Type', set),
    code_list=('Code', list)
).reset_index()

# 构建映射字典
code_mapping = {}
for _, row in id_grouped.iterrows():
    current_id = row['ID']
    types = row['code_types']
    # 同时存在两种类型时,取Code ID对应的Code值
    if {'Code name', 'Code ID'} <= types:
        target_code = df[(df['ID'] == current_id) & (df['Code_Type'] == 'Code ID')]['Code'].iloc[0]
    else:
        # 仅一种类型时,取该ID任意一个Code值(同ID同类型Code值一致)
        target_code = row['code_list'][0]
    code_mapping[current_id] = target_code

生成的映射字典如下:

{'ID 1': 'A123', 'ID 2': 'Banana', 'ID 3': 'K123'}

步骤2:应用映射替换Code列

使用map方法批量替换,效率远高于逐行循环(适配10万行数据):

df['Code'] = df['ID'].map(code_mapping)

最终结果

处理后的DataFrame:

ID      Code    Code_Type
ID 1    A123    Code name
ID 1    A123    Code name
ID 1    A123    Code ID
ID 2    Banana  Code name
ID 2    Banana  Code name
ID 3    K123    Code ID
ID 3    K123    Code ID

内容的提问来源于stack exchange,提问作者Kenny Carter Jr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:10:47