【发布时间】:2021-11-10 15:08:44
【问题描述】:
我有一个数据框 df,看起来像这样
print(df)
x outlier_flag
10 1
NaN 1
30 1
543 -1
50 1
我想用row['A][i-1] 和row['A][i+1] 之间的插值替换标有outlier_flag==-1 的值,这意味着我想用40 替换显示的错误值543。
我能做的是
df['x'] = df.apply(lambda row: np.nan if row['outlier_flag']==-1 else row['x'], axis=1)
df.interpolate(method='polynomial', order=3, inplace=True)
但我不想这样做,因为这也会在df['x'] 中插入未标记outlier_flag==-1 的nan 值(请参阅第二行)!纯nan 值,未标记标志,我想保留为nan 用于稍后的任务。
那么,有没有办法进行适当的插值,即使对于像 543 这样不是 nan 的值?
我试过了
df['x'] = df.apply(lambda row: row['x'].interpolate(method='polynomial', order=3) if row['outlier_flag']==-1 else row['x'], axis=1)
但这会引发错误,因为只有nan 可以被插值,而543 是int。你对我有什么建议吗?天呐
【问题讨论】:
标签: python pandas dataframe interpolation outliers