Лямбда Применить к значениям панд, принимая среднее число строк до и после - PullRequest
0 голосов
/ 04 января 2019

У меня есть временной ряд, в котором я хочу очистить набор данных. Как я планирую это сделать, это установить «неправильный» скачок цен на среднее значение цены «до» и «после».

У меня есть имя фрейма панды 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)

Есть ли простой способ установить поперек строк 'mid' так, чтобы, если prx_chg был выше величины X, для 'mid' было установлено среднее значение [row -1], [row +1 ]?

Я пробовал ниже использовать лямбда, но не работал

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 голосов
/ 05 января 2019

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...