如何指定 "maximum delta x" 到 pandas 插值方法?

how do I specify a "maximum delta x" to pandas interpolation methods?

假设我有以下数据框:

> print df
      C     B
A            
1   NaN     1
2   200   NaN
3   300     3
4   400   NaN
50  NaN  1000

我想使用 method='values' 插入 B 列。但是如果连续行之间的增量 X 超过某个阈值,我想要 NaN。例如,如果我将最大增量 x 指定为 3,我会期望这样的结果:

> print df
      C     B
A            
1   NaN     1
2   200     2
3   300     3
4   400   NaN
50  NaN  1000

请注意第 4 行的 B 列值如何保持为 NaN。

好吧,这是我想出的:

def interpolate_data_frame(df, column, max_delta_x=None):
    if max_delta_x is None:
        df[column] = df[column].interpolate(method='values')
        return df

    df['previous_x'] = (df['B'] / df['B'] * df.index).fillna(method='ffill')
    df['next_x'] = (df['B'] / df['B'] * df.index).fillna(method='bfill')
    df['delta_x'] = df['next_x'] - df['previous_x']
    df['valid'] = (df['delta_x'] < max_delta_x).map(lambda x: 1 if x else np.nan)
    df[column] = df[column].interpolate(method='values') * df['valid']
    del(df['previous_x'])
    del(df['next_x'])
    del(df['delta_x'])
    del(df['valid'])
    return df