Агрегировать данные по индексу и столбцу в кадре данных - PullRequest
1 голос
/ 28 июня 2019

У меня есть данные о ценах на акции, как это. Дата на самом деле является индексом фрейма данных. Остальные колонны.

date         open    high    low    close  name
2013-01-01   14.50   14.80   14.25  14.70  AAA
2013-01-02   14.70   14.90   14.30  14.68  AAA
2013-01-01   14.50   14.80   14.25  14.70  BBB
2013-01-02   14.70   14.90   14.30  14.68  BBB
2013-01-01   14.50   14.80   14.25  14.70  CCC
2013-01-02   14.70   14.90   14.30  14.68  CCC

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

Лучшее, что я мог получить, - использовать этот код, но без столбца «имя».

stock_agg = {
  'open': {'ave_open': 'mean'},
  'high': {'ave_high': 'mean'},
  'low': {'ave_low': 'mean'},
  'close': {'ave_close': 'mean'}
}
stock_group = stock_data.groupby([pd.Grouper(freq='M')]).agg(stock_agg)

Как мне сгруппировать по имени и месяцу в приведенном выше примере?

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Просто добавьте второй уровень в groupby:

stock_group = stock_data.groupby([pd.Grouper(freq='M'), 'name']).agg(stock_agg)
0 голосов
/ 28 июня 2019

pandas.DataFrame.groupby может обрабатывать несколько by:

import pandas as pd

df.groupby([df.index.month, 'name']).mean()

Выход:

           open   high     low  close
date name                            
1    AAA   14.6  14.85  14.275  14.69
     BBB   14.6  14.85  14.275  14.69
     CCC   14.6  14.85  14.275  14.69
...