如何基于两个变量合并两个data frame并填充第二个表中的NA值
匹配年月填充NA的实现方案
以下提供R语言和Python两种常用数据分析语言的实现方式:
R语言实现
方法1:dplyr包实现(推荐,可读性高)
假设第一个有完整值的dataframe为df1,待填充的dataframe为df2,代码如下:
library(dplyr) df_filled <- df2 %>% # 按year、month两个字段左关联df1 left_join(df1, by = c("year", "month"), suffix = c("", "_source")) %>% # 优先保留df2的原有值,为空时取df1的对应值 mutate( value1 = coalesce(value1, value1_source), value2 = coalesce(value2, value2_source) ) %>% # 保留原有字段结构 select(year, month, value1, value2)
方法2:基础R实现(无需额外安装包)
# 匹配两个表的年月对应行 match_index <- match(paste(df2$year, df2$month), paste(df1$year, df1$month)) # 仅填充NA值,保留df2原有非空值 df2$value1[is.na(df2$value1)] <- df1$value1[match_index][is.na(df2$value1)] df2$value2[is.na(df2$value2)] <- df1$value2[match_index][is.na(df2$value2)]
Python实现(pandas场景)
import pandas as pd # 将年月设为索引后直接用df1的值填充df2的空值 df_filled = df2.set_index(['year', 'month']).fillna( df1.set_index(['year', 'month']) ).reset_index()
注意事项
- 需保证两个表
year和month字段的数据类型完全一致,例如一个是字符串类型、一个是数值类型会导致匹配失效 - 上述方案均会保留df2的原有非空值,仅填充NA部分,符合需求
内容的提问来源于stack exchange,提问作者user17357507
相关产品推荐
相关产品推荐

