15

假设我有一个索引为每月时间步长的数据框,我知道我可以用来dataframe.groupby(lambda x:x.year)将每月数据分组为每年并应用其他操作。有什么方法可以快速将它们分组,比如说十年?

感谢您的任何提示。

4

4 回答 4

39

要获得十年,您可以将年份除以 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)

于 2013-07-20T17:24:52.540 回答
5

如果您的数据框有标题说:DataFrame ['Population','Salary','vehicle count']

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

使用下面的代码在 10 年的十年中重新采样数据,并为您提供该 dacade 中的所有其他列

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

于 2019-01-02T09:10:45.800 回答
3

使用索引的年份属性:

df.groupby(df.index.year)
于 2013-07-20T17:25:47.680 回答
2

假设您的日期列按名称Date,然后您可以分组

dataframe.set_index('Date').ix[:,0].resample('10AS', how='count')

注意:ix- 这里选择数据框中的第一列

你得到各种偏移量:http: //pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases

于 2016-02-10T17:20:27.200 回答