Панды: Конкат скользящей статистики с набором исходных данных - PullRequest
0 голосов
/ 03 июля 2018

Я хочу добавить скользящий максимум, минимум и среднее к моему фрейму данных. Мой набор данных составляет около 2 миллионов строк, поэтому применение apply занимает много времени. Этот код позволит мне работать очень эффективно, однако моя проблема заключается в том, как согласовать их с исходным набором данных. df - это объект groupby, а out - это фрейм данных. Я надеюсь, что смогу сделать что-то вроде этого: out = pd.concat([df, d1, d2, d3, d4], 1)

import pandas as pd

df = pd.DataFrame(np.random.randint(0,100,size=(1000, 3)), 
                     columns=['Group','Time','Value'])
df.sort_values(by='Time', inplace=True)

suffix = 'my_suffix'
windows = [7, 14, 28]
df = df.groupby('Group')

d1 = pd.concat([df.rolling(w).mean()\
                  .rename(columns=lambda x: x + '_' + str(w) + 'D_mean_' + suffix)\
               for w in windows] , 1)
d2 = pd.concat([df.rolling(w).std()\
                  .rename(columns=lambda x: x + '_' + str(w) + 'D_std_' + suffix) \
               for w in windows] , 1)
d3 = pd.concat([df.rolling(w).min()\
                  .rename(columns=lambda x: x + '_' + str(w) + 'D_min_' + suffix) \
               for w in windows] , 1)
d4 = pd.concat([df.rolling(w).max()\
                  .rename(columns=lambda x: x + '_' + str(w) + 'D_max_' + suffix) \
               for w in windows] , 1)

out = pd.concat([d1, d2, d3, d4], 1)

Спасибо

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете сделать

ori=df.copy()
pd.concat([ori.set_index('Group',append=True).swaplevel(0,1),out], 1).reset_index()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...