найти среднее значение для одной и той же даты в разные годы

1

Я работаю над следующим DataFrame:

df
Out[1]: 
              temp_C
date          
2013-01-01    12
2013-01-02    11
2013-01-03    10
2013-01-04     9
2013-01-05    10
2013-01-06    10
2013-01-07    11
2013-01-08    12
2013-01-09    14
2013-01-10    14
2013-01-11    12
2013-01-12    12
2013-01-13    11
2013-01-14    10
2013-01-15    10
2013-01-16    12
2013-01-17    13
...   
2017-01-02     8
2017-01-03     8
2017-01-04     8
2017-01-05     9
2017-01-06     9
2017-01-07    10
2017-01-08    12
2017-01-09    14
2017-01-10    14
2017-01-11    10
2017-01-12    10
2017-01-13    11
2017-01-14    14
2017-01-15    13
2017-01-16    10
2017-01-17     9
[1770 rows x 1 columns]

Что мне нужно сделать, так это группировать значения по дням года, находить средние (или медианные) значения каждой группы и, таким образом, получать новый DataFrame, в котором значения каждого дня являются средними/медианными/... всех значений за тот же день.

Вот пример:

df_grouped
Out[2]: 
              temp_C
date
2013-01-01    12
2014-01-01    10
2015-01-01    10
2016-01-01    12
2017-01-01    11
2013-01-02    11
2014-01-02    10
....
2016-12-31    8
2017-12-31    7

df_mean
Out[3]: 
              temp_C
date
1970-01-01    11 #the year is not meaningful anymore
1970-01-02    11.4
1970-01-03    12.5
....
1970-12-30    7.5
1970-12-31    7.5

Спасибо.

Теги:
pandas

1 ответ

2
Лучший ответ

Настроить

df = pd.DataFrame(
    {'temp_C': range(10)},
    pd.to_datetime([
        '2010-01-23', '2012-03-30',
        '2013-01-23', '2013-03-30',
        '2014-01-23', '2014-03-30',
        '2016-01-23', '2015-03-30',
        '2017-01-23', '2017-03-30',
    ])
)

groupby

df.groupby('{:%m-%d}'.format).mean()

       temp_C
01-23       4
03-30       5

объяснение

Строки имеют format метод, который можно использовать как вызываемый. Он принимает аргументы, которые обрабатываются и интерполируются как новая строка.

'{:%m-%d}'.format является вызываемым, который принимает один позиционный аргумент и обрабатывается тем, что находится в {} внутри строки. В этом случае '{:%m-%d}' специфичен для обработки дат, и форматирование может быть лучше понято здесь. В нем говорится, глядя на дату, отформатируйте ее как месяц-день.

При передаче вызываемого в groupby по groupby нему применяется тот, который можно groupby каждому элементу индекса. Поскольку наш индекс Datetime каждый элемент возвращается как месяц и день. Это именно то, что мы хотели, чтобы принять наше mean.

  • 0
    Спасибо большое, работает отлично. Просто вопрос: в этом случае что означают скобки {}? или лучше: какая у них цель?
  • 0
    Я добавлю больше объяснений немного. Я собираю пример. Тогда я объясню
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню