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

如何在两个Pandas DataFrame间匹配ID并更新首个DataFrame的状态列

解决Pandas DataFrame匹配更新并保留最新记录的问题

现有数据

df数据:

system_timestatusiddate
2022-03-04T07:52:26ZPending7722022-03-04 07:52:26+00:00
2022-06-22T17:52:42ZPending9632022-06-22 17:52:42+00:00
2022-08-13T01:34:44ZPending10522022-08-13 01:34:44+00:00
2022-08-24T01:46:31.115ZComplete10522022-08-24 01:46:31.115000+00:00
2022-08-14T06:04:54.736ZPending10532022-08-14 06:04:54.736000+00:00
2022-03-04T17:51:15.025ZPending7722022-03-04 17:51:15.025000+00:00
2022-08-24T06:24:54.736ZInprogress9992022-08-24 06:24:54.736000+00:00

df1数据:

idtask_status
1052Complete
889Pending
772Complete
963Pending

df列类型:

system_time  - object
status - object
id    - int64
date   - object

已执行转换代码:

df['date'] = pd.to_datetime(df['system_time'])

需求

  • 基于id匹配df和df1,匹配成功则将df的status替换为df1的task_status
  • 保留df中每个id的最新记录(按date字段取最晚时间的行)
  • 未匹配到df1的id,保持原status不变

预期输出

system_timestatusiddate
2022-06-22T17:52:42ZPending9632022-06-22 17:52:42+00:00
2022-08-24T01:46:31.115ZComplete10522022-08-24 01:46:31.115000+00:00
2022-08-14T06:04:54.736ZPending10532022-08-14 06:04:54.736000+00:00
2022-03-04T17:51:15.025ZComplete7722022-03-04 17:51:15.025000+00:00
2022-08-24T06:24:54.736ZInprogress9992022-08-24 06:24:54.736000+00:00

解决方案

按以下步骤实现:

  1. 合并数据:用左连接将df1的task_status关联到df中,确保不丢失df的任何行
  2. 更新status字段:对匹配到的id,用task_status覆盖原status;未匹配的保持原状态
  3. 筛选最新记录:按id分组,每个组内取date最大的行
  4. 整理结果:重置索引并恢复原列顺序

完整代码:

# 1. 左连接合并df和df1,关联task_status
merged_df = df.merge(df1, on='id', how='left')

# 2. 更新status列:有task_status则替换,否则保留原status
merged_df['status'] = merged_df['task_status'].fillna(merged_df['status'])

# 3. 按id分组,取每个id的最新记录(date最大的行)
# 先按date降序排序,再分组取第一行
result_df = merged_df.sort_values('date', ascending=False).groupby('id').first().reset_index()

# 4. 恢复原列顺序(去掉task_status列)
result_df = result_df[['system_time', 'status', 'id', 'date']]

# 输出结果
print(result_df)

执行上述代码后,即可得到符合预期的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:01:03