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

如何用df_new更新扩展df_old:重复DateTime键保留新记录

用Pandas实现DataFrame更新:新数据覆盖重复键

问题描述

现有两个结构完全一致的DataFrame df_old 和 df_new,以DateTime列为唯一键。需要合并两者,重复键仅保留df_new中的记录,得到更新后的DataFrame。

示例数据

df_old:

DateTime     B     C
2024-09-21   12.9  5.4
2024-09-22   13.1  5.4

df_new:

DateTime     B     C
2024-09-22   13.2  5.2
2024-09-23   13.4  4.9

期望结果 df_updated:

DateTime     B     C
2024-09-21   12.9  5.4
2024-09-22   13.2  5.2  # 新值覆盖旧记录
2024-09-23   13.4  4.9

解决方案

方法1:concat + drop_duplicates(直观易理解)

通过合并两个DataFrame后去重,保留df_new的重复键记录:

import pandas as pd

# 构造示例数据(实际使用时替换为你的DataFrame)
df_old = pd.DataFrame({
    'DateTime': ['2024-09-21', '2024-09-22'],
    'B': [12.9, 13.1],
    'C': [5.4, 5.4]
})

df_new = pd.DataFrame({
    'DateTime': ['2024-09-22', '2024-09-23'],
    'B': [13.2, 13.4],
    'C': [5.2, 4.9]
})

# 合并并去重:将df_new放在后面,保留最后出现的重复行
df_updated = pd.concat([df_old, df_new]) \
    .drop_duplicates(subset='DateTime', keep='last') \
    .sort_values('DateTime') \
    .reset_index(drop=True)

print(df_updated)

逻辑说明:

  1. pd.concat([df_old, df_new]) 按顺序合并两个DataFrame,df_new的行在df_old之后;
  2. drop_duplicates(subset='DateTime', keep='last') 按DateTime去重,保留最后出现的行(即df_new的重复键记录);
  3. sort_values('DateTime') 保证结果按日期排序,reset_index(drop=True) 重置索引避免混乱。

方法2:combine_first(适合索引操作场景)

将DateTime设为索引后,用combine_first实现覆盖:

import pandas as pd

# 构造示例数据
df_old = pd.DataFrame({
    'DateTime': ['2024-09-21', '2024-09-22'],
    'B': [12.9, 13.1],
    'C': [5.4, 5.4]
})

df_new = pd.DataFrame({
    'DateTime': ['2024-09-22', '2024-09-23'],
    'B': [13.2, 13.4],
    'C': [5.2, 4.9]
})

# 设置DateTime为索引
df_old_idx = df_old.set_index('DateTime')
df_new_idx = df_new.set_index('DateTime')

# 用df_new覆盖重复索引,补充df_old独有的索引
df_updated = df_new_idx.combine_first(df_old_idx) \
    .reset_index() \
    .sort_values('DateTime')

print(df_updated)

逻辑说明:

  1. combine_first 会优先保留左边DataFrame(df_new_idx)的所有数据,仅用右边DataFrame(df_old_idx)填充左边缺失的索引行;
  2. 最后恢复DateTime为列并排序,得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:52:02