Pandas сгруппированы на одну и ту же дату по годам (группа 2007-01-01 с 2008-01-01 et c.) - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть pandas -данный, в котором указана температура для каждого часа. Я уже сгруппировал по средней температуре дня с:

weather = weather.groupby(pd.Grouper(key='date', freq='D')).mean()

до:

                 temp
date                 
2007-01-01  11.457143
2007-01-02   9.229167
2007-01-03   9.085106
2007-01-04  11.234043
2007-01-05  11.239130
...               ...
2016-12-27   8.437500
2016-12-28   5.145833
2016-12-29   3.739130
2016-12-30   7.020833
2016-12-31   3.729167

[3653 rows x 1 columns]

как я могу получить среднюю температуру та же дата на протяжении многих лет? Например, средняя температура за 2007-01-01 / 2008-01-01 / 2009-01-01 и т. Д.

Мои данные должны выглядеть примерно так: 01-01 средняя температура с первого января по годам:

01-01   12
01-02   15
01-03   13

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Создание фрейма данных:

rng = pd.date_range('2015-01-01', periods=1000, freq='D')
    df = pd.DataFrame({ 'Date': rng, 'Val' : np.random.randint(low=12, high=100, size=len(rng))}) 

Получение столбца даты месяца

df['month_day'] = df['Date'].map(lambda x: x.strftime('%m-%d'))

Группировка по месяцу

df.groupby('month_day').mean()
0 голосов
/ 15 апреля 2020

Вы можете группировать по месяцам и дням:

weather = weather.groupby([weather.index.month, weather.index.day])[['val']].mean()

Вы получаете серию, индексированную парами (month, day). Вы можете go сделать шаг вперед, если хотите, чтобы индекс представлял собой строки 'month-day':

weather.index = pd.Series(weather.index.values).apply(lambda x: '{0:02d}-{1:02d}'.format(*x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...