首页 > 解决方案 > 使用 pandas Grouper 按十年开始对 DataFrame 进行分组

问题描述

我有一个从 01-01-1973 到 12-31-2014 的每日观察数据框。

一直在使用 Pandas Grouper,到目前为止,每个频率的一切都运行良好:我想按 70 年代、80 年代、90 年代等十年对它们进行分组。

我试着这样做

import pandas as pd
df.groupby(pd.Grouper(freq = '10Y')).mean()

但是,这会将它们分组为 73-83、83-93 等。

标签: pythonpandasgroup-bypandas-groupby

解决方案


pd.cut还可以指定具有指定开始年份的常规频率。

import pandas as pd
df
                 date  val
0 1970-01-01 00:01:18    1
1 1979-12-31 18:01:01   12
2 1980-01-01 00:00:00    2
3 1989-01-01 00:00:00    3
4 2014-05-06 00:00:00    4

df.groupby(pd.cut(df.date, pd.date_range('1970', '2020', freq='10YS'), right=False)).mean()
#                          val
#date                         
#[1970-01-01, 1980-01-01)  6.5
#[1980-01-01, 1990-01-01)  2.5
#[1990-01-01, 2000-01-01)  NaN
#[2000-01-01, 2010-01-01)  NaN
#[2010-01-01, 2020-01-01)  4.0

推荐阅读