Lambda套用至Pandas值,并取得前后的平均值

时间:2019-01-04 16:24:41

标签: python-3.x pandas lambda

我有一个价格时间序列,希望清除数据集。我打算怎么做,就是将“不正确的”价格跳升设置为“之前”和“之后”价格的平均值。

我有一个熊猫框架名称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))

1 个答案:

答案 0 :(得分:1)

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