我有一个包含4年数据的csv文件,我试图在4年内每个季节对数据进行分组,不同的说法,我需要总结并将我的整个数据绘制到4个赛季。 这是我的数据文件:
@test.score = 0 if @test.score.nil?
这是我想要的输出:
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 .....
我错了哪里?
答案 0 :(得分:4)
<强> pandas.cut
强>
为了在一年的开始和结束时正确处理'Winter'
,我将dayofyear
移到了11
,并将结果模数为366
。我不使用与numpy
解决方案中相同的技术的原因是pd.cut
返回分类类型,我最终会得到5个类别,其中两个类别具有相同的标签。然后我可以将结果转换为字符串,但这感觉很草率。
data['SEASON'] = pd.cut(
(data.index.dayofyear + 11) % 366,
[0, 91, 183, 275, 366],
labels=['Winter', 'Spring', 'Summer', 'Fall']
)
<强> numpy.searchsorted
强>
为了在年初和年末正确处理'Winter'
,我允许'Winter'
seasons = np.array(['Winter', 'Spring', 'Summer', 'Fall', 'Winter'])
f = np.searchsorted([80, 172, 264, 355], data.index.dayofyear)
data['SEASON'] = seasons[f]
plot
data.groupby('SEASON')['impact'].mean().plot.bar()
答案 1 :(得分:2)
看起来像:
data['SEASON'] = data.index.to_series().dt.**month**.map(lambda x : season(x))
使用的月份大概是1-12或0-11,这些都是“冬天”。 你需要使用一年中的这一天。
但你可能更容易看到这一点,并且如果你没有把一天中的提取物锁定在一个单行内,就可以打印自己检查。只是说。
答案 2 :(得分:2)
data['SEASON'] = data.index.dayofyear.map(season)
pandas.cut
的另一个解决方案:
bins = [0, 91, 183, 275, 366]
labels=['Winter', 'Spring', 'Summer', 'Fall']
doy = data.index.dayofyear
data['SEASON1'] = pd.cut(doy + 11 - 366*(doy > 355), bins=bins, labels=labels)