使用Pandas DataFrame按十年为单位对年份索引进行分组

15
假设我有一个以月份为时间步长的数据框,我知道可以使用 dataframe.groupby(lambda x:x.year) 将月度数据分组为年度数据并应用其他操作。是否有一种方法可以快速将它们按十年为单位进行分组?
感谢任何提示。
4个回答

41

要获取一个年代,可以将该年份进行整数除以10,然后再乘以10。例如,如果你从

>>> dates = pd.date_range('1/1/2001', periods=500, freq="M")
>>> df = pd.DataFrame({"A": 5*np.arange(len(dates))+2}, index=dates)
>>> df.head()
             A
2001-01-31   2
2001-02-28   7
2001-03-31  12
2001-04-30  17
2001-05-31  22
你可以按年份分组,像往常一样(这里有一个DatetimeIndex,所以非常容易):
>>> df.groupby(df.index.year).sum().head()
         A
2001   354
2002  1074
2003  1794
2004  2514
2005  3234

或者你可以使用(x//10)*10这个技巧:

>>> df.groupby((df.index.year//10)*10).sum()
           A
2000   29106
2010  100740
2020  172740
2030  244740
2040   77424

如果您没有可以使用 .year 的内容,您仍然可以执行 lambda x: (x.year//10)*10)


6

如果您的数据框具有标题,比如:DataFrame ['人口','薪资','车辆数']

将您的索引设置为年份:DataFrame = DataFrame.set_index('Year')

使用以下代码对数据进行十年一次的重新采样,并在该十年内给出所有其他列的总和

datafame = dataframe.resample('10AS').sum()


1
最佳解决方案,不需要任何变通方法。应该被接受为答案。 - bk_
这很完美。我在我的日期时间变量(以及一个名为“t_0_low”的变量)上运行它,也可以正常工作。参见: g_1 = dfm.set_index('datetime').resample('10AS')['t_0_low'].sum() - Rens

3

使用索引的年份属性:

df.groupby(df.index.year)

3
这将按年份分组,而不是按十年份分组,不幸的是。 - BCArg

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接