我有一个价格时间序列,希望清除数据集。我打算怎么做,就是将“不正确的”价格跳升设置为“之前”和“之后”价格的平均值。
我有一个熊猫框架名称df,价格为“中”。我按如下设置prx_chg。
df['prx_chg'] = df['mid'].pct_change(periods= 1, fill_method='pad', limit=None, freq=None).shift(periods = -1).fillna(0)
是否存在一种简单的方法来设置“ mid”行,使得如果prx_chg高于X幅度,则将“ mid”设置为[row -1],[row +1]的平均值]?
我使用lambda apply尝试了以下操作,但没有成功
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))
答案 0 :(得分:1)
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