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

如何基于name列用df2的行替换df1中对应行的数据?

基于Name列用df2补全df1缺失数据的实现方法

问题场景

现有两个DataFrame:
df1存在部分行的缺失值:

name    code     country     type
---------------------------------
 ben     100          de        l
 mic     200          nl        s
 dan     NaN         NaN      NaN
 bro     NaN         NaN      NaN

df2包含df1缺失行的正确数据:

name    code     country     type
---------------------------------
 dan     400          be        l
 bro     500          cz        m

需要基于name列,用df2的行替换df1中对应name的缺失行,得到目标DataFrame:

name    code     country     type
---------------------------------
 ben     100          de        l
 mic     200          nl        s
 dan     400          be        l
 bro     500          cz        m

解决方案

以下是几种常用的Pandas实现方法:

方法1:使用combine_first()

该方法会优先保留df1的非缺失数据,仅用df2的数据填补df1的缺失项,需先将name设为索引以实现匹配:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({
    'name': ['ben', 'mic', 'dan', 'bro'],
    'code': [100, 200, pd.NA, pd.NA],
    'country': ['de', 'nl', pd.NA, pd.NA],
    'type': ['l', 's', pd.NA, pd.NA]
})

df2 = pd.DataFrame({
    'name': ['dan', 'bro'],
    'code': [400, 500],
    'country': ['be', 'cz'],
    'type': ['l', 'm']
})

# 设置name为索引,合并后重置索引并恢复列顺序
df_final = df1.set_index('name').combine_first(df2.set_index('name')).reset_index()
df_final = df_final[['name', 'code', 'country', 'type']]

方法2:使用update()

该方法会直接用df2的数据覆盖df1中匹配到的行,注意会修改原DataFrame,建议先复制一份:

df1_copy = df1.copy()

# 设置name为索引以对齐数据
df1_copy.set_index('name', inplace=True)
df2.set_index('name', inplace=True)

# 执行更新操作
df1_copy.update(df2)

# 重置索引并恢复列顺序
df_final = df1_copy.reset_index()[['name', 'code', 'country', 'type']]

方法3:合并后去重(concat + drop_duplicates)

将两个DataFrame合并后,按name去重并保留最后出现的行(即df2的行),适合df2完全覆盖df1缺失行的场景:

# 合并两个DataFrame
combined_df = pd.concat([df1, df2])

# 按name去重,保留最后一行,再排序恢复原顺序
df_final = combined_df.drop_duplicates(subset='name', keep='last') \
                      .sort_values('name') \
                      .reset_index(drop=True)
df_final = df_final[['name', 'code', 'country', 'type']]

内容的提问来源于stack exchange,提问作者Denver Dang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:34:53