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

如何基于ID匹配与日期条件用Pandas更新主DataFrame

Pandas 按条件匹配并更新主表数据

现有两个Pandas DataFrame:df_master(主表)和df_updt(更新表),需实现以下操作:

  • 当主表的Id与更新表的org_id匹配,且主表的dt_id小于更新表的cal_id时,用更新表的A、B、C列更新主表对应列;
  • 若同一ID存在多条符合条件的更新记录,需选取cal_id最新的那条。

示例代码

import pandas as pd

master_tb = {
'Id' : ['A1','A2','A3','A4','A5','A6','A7'],
'dt_id' : [20230130,20230104,20230130,20230130,20230130,20230130,20230130],
'A' : [0,3,4,2,9,8,7],
'B' : [5,8,3,1,6,4,2],
'C' : [5,2,6,8,8,8,7] }

updt_tb = {
'cal_Id' : [20230103,20230215,20230104,20230104,20230504],
'org_id' : ['A2','A2','A5','A9','A5'],
'A' : [30,80,100,100,80],
'B' : [0,10,90,40,40],
'R' : [0,100,50,60,80],
'C' : [30,10,50,40,80],
'T' : [90,50,50,40,30]  }

# 创建DataFrame对象
df_master = pd.DataFrame(master_tb)
df_updt = pd.DataFrame(updt_tb) 

期望输出

Id  dt_id       A   B   C
A1  20230130    0   5   5
A2  20230104    80  10  10
A3  20230130    4   3   6
A4  20230130    2   1   8
A5  20230130    80  40  80 
A6  20230130    8   4   8
A7  20230130    7   2   7

解决方案

实现步骤

  1. 预处理更新表:按org_id分组,保留每个org_id中cal_Id最大的记录,只保留更新所需的列;
  2. 关联主表与更新表:通过Id和org_id做左关联,保留主表所有记录的同时匹配更新数据;
  3. 条件筛选并更新:筛选出主表dt_id小于更新表cal_Id的行,用更新表的A、B、C列覆盖主表对应列。

完整代码

import pandas as pd

# 1. 预处理更新表:保留每个org_id对应的最新cal_Id记录
df_updt_processed = df_updt.sort_values(by=['org_id', 'cal_Id'], ascending=[True, False]) \
                           .groupby('org_id').first() \
                           .reset_index()[['org_id', 'cal_Id', 'A', 'B', 'C']]

# 2. 关联主表与处理后的更新表
merged = df_master.merge(df_updt_processed, left_on='Id', right_on='org_id', how='left')

# 3. 筛选符合条件的行并更新主表数据
update_mask = merged['dt_id'] < merged['cal_Id']
df_master.loc[update_mask, ['A', 'B', 'C']] = merged.loc[update_mask, ['A_y', 'B_y', 'C_y']].values

# 打印结果
print(df_master)

代码说明

  • 排序后分组取第一条,确保每个org_id仅保留最新的更新记录;
  • 左关联保证主表所有记录不丢失,同时匹配到对应的更新数据;
  • 布尔索引update_mask精准筛选需要更新的行,避免误更新不符合条件的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:58:10