Pandas сдвиг данных столбца по значению другого столбца - PullRequest
1 голос
/ 26 февраля 2020

У меня есть датафрейм, который выглядит следующим образом:

    epochseconds  midPrice  midPrice_1
0     1570780800  2954.625         NaN
1     1570780800  2954.625         NaN
2     1570780800  2954.625         NaN
3     1570780800  2954.625         NaN
4     1570780800  2954.625         NaN
5     1570780800  2954.625         NaN
6     1570780800  2954.875         NaN
7     1570780800  2954.875         NaN

    epochseconds  midPrice  midPrice_1
24    1570780801  2954.875         NaN
25    1570780801  2954.875         NaN
26    1570780801  2954.875         NaN
27    1570780801  2954.875         NaN
28    1570780801  2954.875         NaN
29    1570780801  2954.875         NaN
30    1570780801  2954.875         NaN
31    1570780801  2955.000         NaN

Каждая эпоха имеет разное количество наблюдений. Я хочу предсказать следующую среднюю цену в эпоху + 1. Я хотел применить pandas .DataFrame.shift, однако это не учитывает, что у меня появляются разные наблюдения в каждую секунду. Есть ли способ взять среднее значение эпохи: 1570780801 и применить его ко всем наблюдениям эпохи: 1570780800. У меня всего 868471 секунда, поэтому этот код должен применяться ко всем наблюдениям.

Кто-нибудь знает, как это сделать?

1 Ответ

2 голосов
/ 26 февраля 2020

Добро пожаловать в переполнение стека.

Вы можете рассчитать среднее значение для всех наблюдений за те же эпохи, используя функцию groupby, затем shift (сдвиг на -1, так как вы хотите среднее значение текущая эпоха, которая будет применена к предыдущей эпохе).

Затем выполняется левое соединение с исходным кадром данных.

df_mean_shifted = df.groupby('epochseconds')['midPrice'].mean().shift(-1).rename('midPrice_1')

df.merge(df_mean_shifted, left_on='epochseconds', right_index=True)

Это даст вам то, что вы хотите, но вы должны решить, как заполнить записи за последнюю эпоху, которая будет нулевой (из-за shift).

    epochseconds    midPrice    midPrice_1
0   1570780800      2954.625    2954.890625
1   1570780800      2954.625    2954.890625
2   1570780800      2954.625    2954.890625
3   1570780800      2954.625    2954.890625
4   1570780800      2954.625    2954.890625
5   1570780800      2954.625    2954.890625
6   1570780800      2954.875    2954.890625
7   1570780800      2954.875    2954.890625
24  1570780801      2954.875        
25  1570780801      2954.875        
26  1570780801      2954.875        
27  1570780801      2954.875        
28  1570780801      2954.875        
29  1570780801      2954.875        
30  1570780801      2954.875        
31  1570780801      2955.0      

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...