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

如何用自定义函数替换Pandas中的ffill()方法填充NaN值?

问题描述

我的示例DataFrame如下:

x   y
0   0   1.1
1   1   3.9
2   2   11.2
3   3   21.5
4   4   34.8
5   5   51.0
6   6   70.2
7   7   NaN
8   8   NaN
9   9   NaN

如果只是向前填充NaN值,执行df['y'].ffill(inplace=True)即可,但我需要将y列的NaN值替换为公式2 * x²的计算结果,期望输出如下:

x   y
0   0   1.1
1   1   3.9
2   2   11.2
3   3   21.5
4   4   34.8
5   5   51.0
6   6   70.2
7   7   98
8   8   128
9   9   162 
解决方案

这里提供几种高效的实现方式:

方法1:利用fillna直接填充计算值

fillna可以接收Series作为填充值,自动匹配索引替换NaN:

df['y'] = df['y'].fillna(2 * df['x'] ** 2)

这种方法简洁高效,优先推荐。

方法2:使用np.where条件赋值

通过判断y是否为缺失值,选择保留原值或计算新值:

import numpy as np

df['y'] = np.where(df['y'].isna(), 2 * df['x'] ** 2, df['y'])

逻辑清晰,适合需要扩展多条件判断的场景。

方法3:apply逐行处理(适合复杂逻辑)

如果需要更复杂的自定义规则,可以用apply遍历每行:

import pandas as pd

def fill_missing_y(row):
    if pd.isna(row['y']):
        return 2 * row['x'] ** 2
    return row['y']

df['y'] = df.apply(fill_missing_y, axis=1)

注意:该方法在数据量较大时效率低于前两种,仅在逻辑复杂时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:18:20