如何为pandas插值方法指定“最大delta x”?

时间:2015-11-14 02:06:28

标签: python pandas interpolation

假设我有以下数据框:

> 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。例如,如果我指定最大delta 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的。

1 个答案:

答案 0 :(得分:0)

嗯,这就是我想出的:

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