如何使用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即为期望结果:
| index | colA | colB | colC |
|---|---|---|---|
| 0 | California | 321 | abc |
| 1 | New York | 456 | def |
| 2 | Texas | 789 | ihg |
方法二:使用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
相关产品推荐
相关产品推荐

