如何在 Pandas (python) 中定义自己的填充方法参数?

wee*_*der 5 python numpy pandas

一些 DataFrame 和 Series 方法具有 method 参数。例如:

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
Run Code Online (Sandbox Code Playgroud)

并且方法参数可以采用以下值:{None, 'backfill'/'bfill', 'pad'/'ffill', 'nearest'}

不过,我想变形点焊某种填充式功能这反过来通过使用已经存在于系列中的值定义如何填补空白的,所以它可以通过以下方式来使用:

df = DataFrame.fillna(method='new_method')
Run Code Online (Sandbox Code Playgroud)

hon*_*a_p 0

在您非常具体的情况下(最接近值的平均值),您可以这样做:

import pandas as pd
import numpy as np

col1 = np.array([0, 1, np.nan, 4])
col2 = np.array([0, np.nan, 2, 5])

df = pd.DataFrame({"col1" : col1, "col2" : col2})

# Trick: average forward and backward fill
df = 0.5 * (df.fillna(method="bfill") + df.fillna(method="ffill"))
Run Code Online (Sandbox Code Playgroud)

通过对向后和向前填充进行平均,您将获得平均值,同时保持所有其他值(舍入误差除外)不变。但当然,它不适用于第一行和最后一行。(但是如果可以接受的话,您可以再次使用 fill 和 bfill )