假设我有以下数据框:
> 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的。
答案 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