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

如何合并两个DataFrame:保留历史数据并按列更新新值?

Pandas实现DataFrame指定行数据覆盖更新

需求明确:保留历史DataFrame(DF_1)的所有行,同时用更新DataFrame(DF_2)中对应Hour的Value_1、Value_2值覆盖DF_1的原有数据。

正确实现代码

import pandas as pd

# 构造示例DF_1
df1 = pd.DataFrame({
    'Hour': ['13:00', '14:00', '15:00', '16:00', '17:00', '18:00'],
    'Value_1': [20, 20, 120, 125, 130, 20],
    'Value_2': [30, 30, 140, 145, 135, 20]
})

# 构造示例DF_2
df2 = pd.DataFrame({
    'Hour': ['15:00', '16:00', '17:00'],
    'Value_1': [200, 225, 260],
    'Value_2': [240, 255, 275]
})

# 1. 将两个DataFrame的Hour列设为索引,确保按Hour值匹配而非行位置
df1_indexed = df1.set_index('Hour')
df2_indexed = df2.set_index('Hour')

# 2. 复制DF_1的索引版本作为基础,避免修改原数据
df_final = df1_indexed.copy()

# 3. 用DF_2的数据覆盖DF_final中对应索引的行
df_final.update(df2_indexed)

# 4. 恢复Hour为普通列(按需选择,若不需要索引可省略此步)
df_final = df_final.reset_index()

print(df_final)

为什么之前的方法没生效?

  • merge/join:默认会按列匹配生成新列(如Value_1_x、Value_1_y),需要额外处理才能覆盖,步骤繁琐且易出错;
  • concat:只是简单拼接行/列,无法实现指定值的覆盖;
  • combine_first:逻辑是用左侧DataFrame的非空值填充右侧,和我们需要的“用右侧更新左侧”方向相反;
  • 直接用update但未设索引:update默认按行位置匹配,而非Hour值,会导致更新错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:50:45