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

如何用Pandas将副DataFrame数据填充主DataFrame的缺失列值?

解决DataFrame缺失值填补问题

你之前用pd.merge(df1, df2, how='inner', on='Year')踩了两个坑:

  • how='inner'是内连接,只保留两个表共有的年份(2019、2020),自然会丢失2021-2023的数据
  • 两个表都有V1列,merge后会自动给重复列加_x(来自df1)、_y(来自df2)后缀,导致重复列

下面给你三种适合新手的解决方案,任选其一即可:

方法一:左连接后合并列

先通过左连接保留主表(df1)的所有行,再用df2的V1填补df1的空值:

import pandas as pd

# 模拟你的数据
df1 = pd.DataFrame({
    'Year': [2023, 2022, 2021, 2020, 2019],
    'V1': ['X0', 'X1', 'X2', pd.NA, pd.NA],
    'V2': ['Y0', 'Y1', 'Y2', 'Y3', 'Y4'],
    'V3': ['Z0', 'Z1', 'Z2', 'Z3', 'Z4'],
    'V4': ['A0', 'A1', 'A2', 'A3', 'A4']
})

df2 = pd.DataFrame({
    'Year': [2020, 2019],
    'V1': ['X3', 'X4']
})

# 左连接:保留df1所有行,匹配df2对应年份的数据
merged = pd.merge(df1, df2, how='left', on='Year')
# 用df2的V1(V1_y)填补df1的V1(V1_x)空值
merged['V1'] = merged['V1_x'].combine_first(merged['V1_y'])
# 删除多余的重复列
df3 = merged.drop(['V1_x', 'V1_y'], axis=1)
print(df3)

方法二:用update直接更新(最简洁)

update方法会直接用df2的非空值覆盖df1的空值,前提是两个表的索引匹配:

# 把df2的索引设为Year,方便按年份匹配
df2.set_index('Year', inplace=True)
# 用df2的V1更新df1的V1(只更新df1中空的部分)
df1.update(df2)
# 此时df1就是你要的结果,也可以复制一份避免修改原数据
df3 = df1.copy()
print(df3)

方法三:用combine_first自动填补

combine_first会自动用右侧DataFrame的值填补左侧的空值,同样需要索引匹配:

# 两个表都设置Year为索引
df1_idx = df1.set_index('Year')
df2_idx = df2.set_index('Year')
# 填补空值后重置索引,恢复Year列
df3 = df1_idx.combine_first(df2_idx).reset_index()
print(df3)

三种方法最终都会得到你想要的DF3结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:40:35