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

如何基于Pandas DataFrame的另一列值填充NaN?

解决方案

这里有两种简洁高效的方法可以实现你的需求,我来一步步给你说明:

方法一:按A列分组后填充对应值

这种方法适合你的场景——每组的非空值都是固定值,利用groupby分组后统一填充:

import pandas as pd
import numpy as np

# 构造原始DataFrame
df = pd.DataFrame({'A': ['a', 'a', 'a', 'b', 'b'],
                   'B': [15, 15, np.nan, 19, np.nan]})

# 分组填充逻辑
df['B'] = df.groupby('A')['B'].transform(lambda x: x.fillna(x.dropna().iloc[0]))

print(df)

代码说明:

  • groupby('A')['B']:按A列的不同取值(a和b)对B列进行分组
  • transform:确保分组处理后的结果能和原DataFrame的索引完全对齐,不会打乱原有数据顺序
  • x.fillna(x.dropna().iloc[0]):对每组的B列,用该组第一个非空值填充NaN(因为你的每组非空值都是相同的,取第一个、均值或者最大值都能得到正确结果)

方法二:用映射字典直接填充

如果A列对应的填充值是提前明确的,直接创建映射字典会更直观:

import pandas as pd
import numpy as np

# 构造原始DataFrame
df = pd.DataFrame({'A': ['a', 'a', 'a', 'b', 'b'],
                   'B': [15, 15, np.nan, 19, np.nan]})

# 定义A列值到填充值的映射关系
fill_map = {'a': 15, 'b': 19}

# 执行填充
df['B'] = df['B'].fillna(df['A'].map(fill_map))

print(df)

代码说明:

  • df['A'].map(fill_map):根据A列的每个值,从字典中取出对应的填充值,生成一个和原DataFrame长度一致的Series
  • fillna:将B列中的NaN,替换成对应位置的填充值

两种方法运行后都会得到你期望的结果:

A   B
0  a  15
1  a  15
2  a  15
3  b  19
4  b  19

内容的提问来源于stack exchange,提问作者連哲瑋

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:44:49