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

如何将一个DataFrame列的值替换为另一个DataFrame的对应值

嗨,这个需求用Pandas很容易实现,核心就是基于STRESC和CATEGORY的组合匹配,把TERMS表的P_TERM映射到FINDINGS表里。我给你两种实用的方法,你可以根据自己的场景选择:

方法一:字典映射(高效简洁)

这种方法适合数据量较大的场景,先把TERMS表转换成一个复合键的映射字典,再快速匹配替换:

import pandas as pd

# 假设你已经读取好了两个DataFrame:terms_df(对应TERMS表)、findings_df(对应FINDINGS表)

# 构建(STRESC, CATEGORY) -> P_TERM的映射字典
term_map = terms_df.set_index(['STRESC', 'CATEGORY'])['P_TERM'].to_dict()

# 给FINDINGS表添加新的P_TERM列,或者直接替换STRESC列
# 示例1:添加P_TERM列,匹配不到则保留原STRESC值
findings_df['P_TERM'] = findings_df.apply(
    lambda row: term_map.get((row['STRESC'], row['CATEGORY']), row['STRESC']),
    axis=1
)

# 示例2:直接替换STRESC列的值
# findings_df['STRESC'] = findings_df.apply(
#     lambda row: term_map.get((row['STRESC'], row['CATEGORY']), row['STRESC']),
#     axis=1
# )

说明:

  • set_index把STRESC和CATEGORY设为复合索引,转成字典后可以直接通过(STRESC值, CATEGORY值)快速查找对应的P_TERM
  • apply逐行处理,get方法的第二个参数是默认值,确保匹配不到的情况下保留原数据,避免出现缺失值
方法二:左连接合并(直观易理解)

如果是新手,用Pandas的merge左连接会更直观,步骤清晰:

# 左连接两个表,基于STRESC和CATEGORY匹配
merged_df = pd.merge(
    findings_df,
    terms_df,
    on=['STRESC', 'CATEGORY'],
    how='left'
)

# 替换STRESC列:如果匹配到P_TERM就用它,否则保留原STRESC值
merged_df['STRESC'] = merged_df['P_TERM'].fillna(merged_df['STRESC'])

# 不需要P_TERM列的话可以删掉
merged_df = merged_df.drop(columns=['P_TERM'])

说明:

  • how='left'保证FINDINGS表的所有行都被保留,即使没有匹配到TERMS表的记录
  • fillna用来处理匹配不到的情况,保留原STRESC的值
  • 如果TERMS表中存在同一(STRESC, CATEGORY)对应多个P_TERM的情况,合并后会生成重复行,需要先对TERMS表去重:terms_df = terms_df.drop_duplicates(subset=['STRESC', 'CATEGORY'])
注意事项
  • 确保两个表的STRESC和CATEGORY列数据类型一致,且没有多余空格(比如字符串前后的空格),否则会匹配失败。可以先做清洗:
    # 清洗列的空格
    for col in ['STRESC', 'CATEGORY']:
        terms_df[col] = terms_df[col].str.strip()
        findings_df[col] = findings_df[col].str.strip()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:51:58