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

如何基于两个变量合并两个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:24:02