首页 > 解决方案 > 熊猫:自定义 fillna() 函数?

问题描述

假设我有这样的数据:

>>> df = pd.DataFrame({'values': [5, np.nan, 2, 2, 2, 5, np.nan, 4, 5]})
>>> print(df)
   values
0     5.0
1     NaN
2     2.0
3     2.0
4     2.0
5     5.0
6     NaN
7     4.0
8     5.0

我知道我可以将fillna(), 与参数一起使用,例如fillna(method='ffill')用前一个值填充缺失值。有没有办法为fillna编写自定义方法?假设我希望将每个 NaN 值替换为前 2 个值和下 2 个值的算术中间值,我该怎么做?(我并不是说这是填充值的好方法,但我想知道是否可以这样做)。

输出必须是什么样子的示例:

0     5.0
1     3.0 
2     2.0
3     2.0
4     2.0
5     5.0
6     4.0
7     4.0
8     5.0

标签: pythonpandasdata-processingdata-wrangling

解决方案


您可以将ffillandbfill一起使用,如下所示:

df['values'] = df['values'].ffill().add(df['values'].bfill()).div(2)
print(df)

   values
0     5.0
1     3.0 
2     2.0
3     2.0
4     2.0
5     5.0
6     4.0
7     4.0
8     5.0

只需将 to 更改df['values']df应用于整个数据框!


推荐阅读