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

如何根据行列条件从源DataFrame提取值并填充目标DataFrame?

Pandas 按日期匹配填充缺失值

问题说明

现有两个DataFrame:

  • df1包含完整的日期及对应b、c列数据
  • df2的date列顺序与df1不同,b、c列均为缺失值,需根据date匹配,将df1的数据填充到df2中。

示例数据:
df1:

date    a    b    c
0  2011-12-30  100  400  700
1  2021-01-30  200  500  800
2  2021-07-30  300  600  900

df2:

date     c     b
0  2021-07-30  <NA>  <NA>
1  2021-01-30  <NA>  <NA>
2  2011-12-30  <NA>  <NA>

期望输出:

date    c    b
0  2021-07-30  900  600
1  2021-01-30  800  500
2  2011-12-30  700  400

解决方案

方法1:合并后赋值

通过merge按date匹配数据,再将对应列的值覆盖到df2:

import pandas as pd

# 构造示例数据(实际使用可跳过)
df1 = pd.DataFrame({
    'date': ['2011-12-30', '2021-01-30', '2021-07-30'],
    'a': [100, 200, 300],
    'b': [400, 500, 600],
    'c': [700, 800, 900]
})

df2 = pd.DataFrame({
    'date': ['2021-07-30', '2021-01-30', '2011-12-30'],
    'c': [pd.NA, pd.NA, pd.NA],
    'b': [pd.NA, pd.NA, pd.NA]
})

# 合并提取目标列
merged_df = df2.merge(df1[['date', 'b', 'c']], on='date', how='left', suffixes=('_orig', ''))
# 更新df2的b、c列
df2[['b', 'c']] = merged_df[['b', 'c']]

print(df2)

方法2:索引对齐填充

将df1设置为date索引后,利用combine_first直接填充缺失值,写法更简洁:

import pandas as pd

# 构造示例数据(实际使用可跳过)
df1 = pd.DataFrame({
    'date': ['2011-12-30', '2021-01-30', '2021-07-30'],
    'a': [100, 200, 300],
    'b': [400, 500, 600],
    'c': [700, 800, 900]
})

df2 = pd.DataFrame({
    'date': ['2021-07-30', '2021-01-30', '2011-12-30'],
    'c': [pd.NA, pd.NA, pd.NA],
    'b': [pd.NA, pd.NA, pd.NA]
})

# 生成以date为索引的参考表
ref_df = df1.set_index('date')[['b', 'c']]
# 对齐索引并填充缺失值
df2 = df2.set_index('date').combine_first(ref_df).reset_index()

print(df2)

两种方法均可得到符合预期的输出,方法2更适合仅需填充缺失值的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:05:20