如何指定 "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
假设我有以下数据框:
> 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