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

如何用Pandas高效通过映射另一列填充DataFrame列缺失值?

Pandas按Month列填充Year缺失值的最优方法

首先构造示例DataFrame用于测试:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Year': [2021, 2021, 2021, 2022, 2022, 2022, np.nan],
    'Month': [10, 11, 12, 1, 2, 3, 1]
})

方法一:np.where简洁实现

适合仅需区分两类Month的场景,代码直观且高效:

df['Year'] = df['Year'].fillna(np.where(df['Month'].isin([1,2,3]), 2022, 2021))

逻辑:判断Month是否属于1/2/3,是则填充2022,否则填充2021,再通过fillna替换Year列的缺失值。

方法二:字典映射+fillna

扩展性更强,若后续新增Month与Year的对应关系,仅需修改字典即可:

month_year_map = {1:2022, 2:2022, 3:2022, 10:2021, 11:2021, 12:2021}
df['Year'] = df['Year'].fillna(df['Month'].map(month_year_map))

逻辑:通过字典定义每个Month对应的Year,用map匹配后填充Year的缺失值。

方法三:loc索引直接赋值

适合需要明确拆分筛选条件的场景,可读性强:

# 填充Month为1/2/3的缺失Year
df.loc[(df['Year'].isna()) & (df['Month'].isin([1,2,3])), 'Year'] = 2022
# 填充Month为10/11/12的缺失Year
df.loc[(df['Year'].isna()) & (df['Month'].isin([10,11,12])), 'Year'] = 2021

最优选择

  • 若仅处理当前两类Month的简单场景,优先选**np.where方法**,代码最简洁高效;
  • 若后续可能扩展更多Month与Year的对应规则,优先选字典映射方法,维护成本更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:57:26