Я работаю над следующим 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
Спасибо.
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
.