我有一个价格时间序列,我希望清理数据集。我打算如何做到这一点,将价格的"不正确"跳跃设置为"之前"和"之后"价格的平均值。
我有一个熊猫框架名称为df,价格为"mid"。我按如下方式设置prx_chg。
df['prx_chg'] = df['mid'].pct_change(periods= 1, fill_method='pad', limit=None, freq=None).shift(periods = -1).fillna(0)
有没有一种简单的方法,在"中"行之间设置,如果prx_chg高于X量级,则"中"设置为[行-1],[行+1]的平均值?
我使用lambda应用程序尝试了以下内容,但没有工作
mid = [1.0, 1.1, 1.0, 100, 1.2, 0.9, -100, 1.2]
df = pd.DataFrame(mid, columns = ['mid'])
df['prx_chg'] = df['mid'].pct_change(periods= 1, fill_method='pad', limit=None, freq=None).shift(periods = -1).fillna(0)
df.apply(lambda row: row['mid'] = np.average(a, b) if row['prx_chg'] >= n.abs(10))
IIUC,在这种情况下,您可以使用np.where
和shift
;
df['mid'] = np.where((df['prx_chg'].shift(1) >= 10) | (df['prx_chg'].shift(1) <= -10), (df['mid'].shift(-1) + df['mid'].shift(1)) / 2, df['mid'])
df
mid prx_chg
0 1.00 0.100000
1 1.10 -0.090909
2 1.00 99.000000
3 1.10 -0.988000
4 1.20 -0.250000
5 0.90 -112.111111
6 1.05 -1.012000
7 1.20 0.000000