从十月到四月,将数据分组到冬季的最佳方法是什么?由于均匀分布的频率为
TimeGrouper
,我不能从1972/1973年,1973/1974年等季节输出季节性的冬季月份…也许是一件小事,但我不知道如何在不开始的情况下做到这一点写一个矫枉过正的解决方案.
sd_x sd_y 1972-10-31 0.000000 0.709677 1972-11-30 1.720838 4.366667 1972-12-31 15.893438 5.600000 1973-01-31 6.256230 6.548387 1973-02-28 0.653714 53.142857 1973-03-31 0.000000 70.354839 1973-04-30 0.000000 11.700000 1973-10-31 0.000000 0.096774 1973-11-30 0.000000 4.266667 1973-12-31 0.394652 53.419355 1974-01-31 4.540915 46.645161 1974-02-28 2.978056 35.571429 1974-03-31 0.000000 4.967742 1974-04-30 0.000000 0.000000 1974-10-31 0.000000 0.064516 1974-11-30 0.000000 1.000000 1974-12-31 5.585954 20.096774 1975-01-31 50.498147 24.580645 1975-02-28 35.906097 22.000000 1975-03-31 0.457109 5.483871 1975-04-30 0.000000 0.433333
解决方法
使用pd.offsets.MonthBegin将月份移回4
shifted_months = df.index - pd.offsets.MonthBegin(5) shifted_months DatetimeIndex(['1972-06-01','1972-07-01','1972-08-01','1972-09-01','1972-10-01','1972-11-01','1972-12-01','1973-06-01','1973-07-01','1973-08-01','1973-09-01','1973-10-01','1973-11-01','1973-12-01','1974-06-01','1974-07-01','1974-08-01','1974-09-01','1974-10-01','1974-11-01','1974-12-01'],dtype='datetime64[ns]',freq=None)
然后我们可以使用.year属性来分组和求和
df.groupby(shifted_months.year).sum() sd_x sd_y 1972 24.524220 152.422427 1973 7.913623 144.967128 1974 92.447307 73.659139
我们可以用指数来提升指数
df.groupby(shifted_months.year).sum().rename(lambda x: '{}/{}'.format(x,x + 1)) sd_x sd_y 1972/1973 24.524220 152.422427 1973/1974 7.913623 144.967128 1974/1975 92.447307 73.659139
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。