假设我的数据框的索引为月度时间步长,我知道我可以使用dataframe.groupby(lambda x:x.year)
将每月数据分组到每年并应用其他操作。有没有什么方法可以快速分组,让我们说十年?
感谢任何提示。
答案 0 :(得分:21)
要获得十年,您可以将年份整数除以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)
。
答案 1 :(得分:3)
使用index的年份属性:
df.groupby(df.index.year)
答案 2 :(得分:1)
假设您的日期列的名称为Date
,那么您可以将其分组
<强> dataframe.set_index('Date').ix[:,0].resample('10AS', how='count')
强>
注意:ix
- 此处选择数据框中的第一列
你得到各种补偿: http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases
答案 3 :(得分:0)
如果您的数据框具有标题,请说:DataFrame ['Population','Salary','vehicle count']
将索引设为年份:DataFrame=DataFrame.set_index('Year')
使用下面的代码在10年的十年中对数据进行重新采样,还为您提供了该十年中的所有其他列
datafame=dataframe.resample('10AS').sum()