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

如何基于多匹配列用另一DataFrame列更新目标DataFrame指定列?

解决方案

要实现这个需求,你可以用Pandas的merge方法,基于指定的多列进行匹配,然后构建新的DataFrame保留需要的字段:

步骤说明

  • 从previous_df中筛选出用于匹配的字段(order_id, country, region)和需要更新的字段(email, approved, comment)
  • 将current_df和筛选后的previous_df做左连接,确保current_df的所有行都被保留
  • 从连接后的结果中提取需要保留的字段,替换掉current_df中原有的待更新字段

代码实现

import pandas as pd

# 假设两个DataFrame已定义
# current_df = ...
# previous_df = ...

# 提取previous_df中需要的匹配与更新字段
prev_update = previous_df[['order_id', 'country', 'region', 'email', 'approved', 'comment']]

# 左连接两个DataFrame,匹配键为指定的三列
merged_df = pd.merge(current_df, prev_update, 
                     on=['order_id', 'country', 'region'], 
                     how='left', 
                     suffixes=('_curr', '_prev'))

# 构建符合要求的新DataFrame
new_current_df = pd.DataFrame({
    'id': merged_df['id'],
    'email': merged_df['email_prev'],
    'approved': merged_df['approved_prev'],
    'comment': merged_df['comment_prev'],
    'order_id': merged_df['order_id'],
    'country': merged_df['country'],
    'region': merged_df['region'],
    'date': merged_df['date']
})

# 查看结果
print(new_current_df)

输出结果

id        email  approved           comment order_id         country  region        date
0  3211  abc@test.com      True  Test Comment abc  abc_123          Greece  Europe 2024-04-02
1  3476  xyz@test.com      True  Test Comment xyz  xyz_456  Czech Republic  Europe 2024-04-02

补充说明

  • how='left'保证current_df的所有行都被保留,若previous_df中无匹配项,对应更新字段会显示NaN
  • suffixes参数用于区分两个DataFrame中的同名字段,避免列名冲突
  • 最后构造新DataFrame时直接指定字段,确保完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:41:19