如何合并两个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
相关产品推荐
相关产品推荐

