Python 2.7 如何利用熊猫对4年的数据进行季节性分组

Python 2.7 如何利用熊猫对4年的数据进行季节性分组,python-2.7,pandas,group-by,Python 2.7,Pandas,Group By,我有一个包含4年数据的csv文件,我需要在4年内按季度对我的数据进行分组:以下是我的数据: timestamp,heure,lat,lon,impact,type 2006-01-01 00:00:00,13:58:43,33.837,-9.205,10.3,1 2006-01-02 00:00:00,00:07:28,34.5293,-10.2384,17.7,1 2007-02-01 00:00:00,23:01:03,35.0617,-1.435,-17.1,2 2007-02-02 00

我有一个包含4年数据的csv文件,我需要在4年内按季度对我的数据进行分组:以下是我的数据:

timestamp,heure,lat,lon,impact,type
2006-01-01 00:00:00,13:58:43,33.837,-9.205,10.3,1
2006-01-02 00:00:00,00:07:28,34.5293,-10.2384,17.7,1
2007-02-01 00:00:00,23:01:03,35.0617,-1.435,-17.1,2
2007-02-02 00:00:00,01:14:29,36.5685,0.9043,36.8,1
2008-01-01 00:00:00,05:03:51,34.1919,-12.5061,-48.9,1
2008-01-02 00:00:00,05:03:51,34.1919,-12.5061,-48.9,1
....
2011-12-31 00:00:00,05:03:51,34.1919,-12.5061,-48.9,1
这是我想要的输出:

winter     (the mean value of impacts)
summer     (the mean value of impacts)
autumn      ....
spring      .....
因此,我预计在4个季节里,每个月会有4行汇总。 我从以下几点开始:

data['impact'] = data['impact'].abs()
yearly = data.groupby(data.index.month)['impact'].mean()

有什么想法吗?

用粗糙的月份。。。假设时间戳在索引中

mlist = [[12, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]
slist = ['winter', 'spring', 'summer', 'autum']
sdict = {k: v for v, ks in zip(slist, mlist) for k in ks}

df.groupby(df.index.month.map(sdict.get)).impact.mean()
设置

import pandas as pd
from io import StringIO

txt = """timestamp,heure,lat,lon,impact,type
2006-01-01 00:00:00,13:58:43,33.837,-9.205,10.3,1
2006-01-02 00:00:00,00:07:28,34.5293,-10.2384,17.7,1
2007-02-01 00:00:00,23:01:03,35.0617,-1.435,-17.1,2
2007-02-02 00:00:00,01:14:29,36.5685,0.9043,36.8,1
2008-01-01 00:00:00,05:03:51,34.1919,-12.5061,-48.9,1
2008-01-02 00:00:00,05:03:51,34.1919,-12.5061,-48.9,1
2011-12-31 00:00:00,05:03:51,34.1919,-12.5061,-48.9,1
"""

df = pd.read_csv(StringIO(txt), parse_dates=[0], index_col=0)
确切日期

import pandas as pd
spring = range(80, 172)
summer = range(172, 264)
fall = range(264, 355)

def season(x):
    if x in spring:
        return 'Spring'
    if x in summer:
        return 'Summer'
    if x in fall:
        return 'Fall'
    else :
        return 'Winter'

df = pd.DataFrame({'_date' :pd.date_range(start=pd.datetime(2016,1,1), end=pd.datetime(2016,12,31), freq='D'),'impact' : range(0,366)})    

df['SEASON'] = df['_date'].dt.dayofyear.apply(lambda x : season(x))
df.groupby('SEASON')['impact'].mean()

你认为季节是整整一个月吗?冬季前:12月、1月、2月?还是确切日期?如果春天是这样的,有时三月20或21的马尔奇可以认为它是整整一个月,除非如果有办法区分它。谢谢你的答案,我得到错误:“numpy.ndarray”对象没有属性“map”,这是因为您使用的是较旧版本的pandas,其中
months
属性不返回索引对象。试试这个
df.index.to_series().dt.month.map(sdict)
!我现在让它工作得很好。非常感谢,谢谢你,但是你能解释一下这行吗:df['seasure']=df.YOURDATE.dt.dayofyear.apply(lambda x:seasure(x)),df['seasure']指的是什么?我的数据中没有。这种语法创建了一个名为“季节”的新列,并为每条记录指定正确的季节标签作为值。亲爱的@steboc,我可以用什么来代替“YOURDATE”和“dayofyear”?