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

如何使用Pandas通过索引补全缺失行并合并DataFrame?

如何通过索引快速合并/补回DataFrame的修改行

你需要将清理后的子集df2(保留原索引)中的修改内容合并回原始DataFrame df1,同时保留df1中未被df2覆盖的行,之前尝试外连接会产生重复列,以下是两种更简便的解决方案:

方法一:直接通过索引定位替换(最直观高效)

利用DataFrame.loc[]按索引匹配,直接将df2的内容替换df1中对应索引的行,无需额外清理冗余列:

import pandas as pd

# 创建示例df1
df1 = pd.DataFrame({
    'colA': ['California', 'New York', 'Texas'],
    'colB': [123, 456, 789],
    'colC': ['abc', 'def', 'ghi']
})

# 创建清理后的df2
df2 = pd.DataFrame({
    'colA': ['California', 'Texas'],
    'colB': [321, 789],
    'colC': ['abc', 'ihg']
}, index=[0, 2])

# 生成结果:复制df1后用df2替换对应索引的行
result = df1.copy()
result.loc[df2.index] = df2

运行后result即为期望结果:

indexcolAcolBcolC
0California321abc
1New York456def
2Texas789ihg

方法二:使用combine_first(适配部分列修改场景)

如果df2仅修改了部分列(而非整行替换),combine_first可以用df2的非缺失值覆盖df1对应位置的值,同时自动保留df1的完整索引:

# 补全df2的索引以匹配df1,再用df2的值覆盖对应位置
result = df2.reindex(df1.index).combine_first(df1)

这种方法会优先使用df2的修改值,未修改的列则保留df1的原始内容。

关于外连接的问题

外连接(如pd.merge(df1, df2, left_index=True, right_index=True, how='outer'))会将两个DataFrame的列全部保留,因此产生带后缀的重复列(如colA_x、colA_y),而上面的两种方法都是直接在原结构上替换/填充,不会产生冗余列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:03:18