Панды - примените скорость вращения колонн - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть фрейм данных, где я беру подмножество только числовых столбцов, вычисляю скользящее среднее значение за 5 дней для каждого числового столбца и добавляю его в качестве нового столбца в df.

Этот подход работает, но в настоящее время занимает довольно много времени (8 секунд на столбец).Мне интересно, есть ли лучший способ сделать это.

Рабочий пример того, чем я сейчас занимаюсь:

data = {'Group': ['A','A','A','A','A','A','B','B','B','B','B','C','C','C','C','C'],
        'Year' : ['2017', '2017', '2017', '2018', '2018', '2018', '2017', '2017', '2018', '2018', '2017', '2017', '2017', '2017', '2018', '2018'],
        'Score 1' : [1,2,3,4,5,6,1,2,3,4,5,1,2,3,4,5],
       'Score 2': [1,4,5,7,5,5,6,1,4,5,6,7,4,6,4,6]}
df = pd.DataFrame(data)

for col in ['Score 1', 'Score 2']:
    df[col + '_avg'] = df.groupby(['Year', 'Group'])[col].apply(lambda x: x.rolling(2, 1).mean().shift().bfill())

1 Ответ

0 голосов
/ 02 марта 2019

Для тех, кто это делает, я смог значительно ускорить это, сначала отсортировав и избежав лямбда-функции:

return_df[col + '_avg'] = df.sort_values(['Group', 'Year']).groupby(['Group'])[col].rolling(2,1).mean().shift().values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...