Lambda 应用于 Pandas 值,取前后行的平均值



我有一个价格时间序列,我希望清理数据集。我打算如何做到这一点,将价格的"不正确"跳跃设置为"之前"和"之后"价格的平均值。

我有一个熊猫框架名称为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.whereshift;

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

最新更新