如何基于多匹配列用另一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中无匹配项,对应更新字段会显示NaNsuffixes参数用于区分两个DataFrame中的同名字段,避免列名冲突- 最后构造新DataFrame时直接指定字段,确保完全符合需求
内容的提问来源于stack exchange,提问作者say_n
相关产品推荐
相关产品推荐

