pandas - Pandas 中是否有从特定日期开始按月分组的方法?
问题描述
我试图在 python 中按月对一些数据进行分组,但我需要从每月 25 日开始的月份,有没有办法在 Pandas 中做到这一点?
几个星期有一种从星期一、星期二开始的方法……但几个月来总是整月。
pd.Grouper(key='date', freq='M')
解决方案
我准备了以下测试DataFrame:
Dat Val
0 2017-03-24 0
1 2017-03-25 0
2 2017-03-26 1
3 2017-03-27 0
4 2017-04-24 0
5 2017-04-25 0
6 2017-05-24 0
7 2017-05-25 2
8 2017-05-26 0
第一步是计算“移位日期”列:
df['Dat2'] = df.Dat + pd.DateOffset(days=-24)
结果是:
Dat Val Dat2
0 2017-03-24 0 2017-02-28
1 2017-03-25 0 2017-03-01
2 2017-03-26 1 2017-03-02
3 2017-03-27 0 2017-03-03
4 2017-04-24 0 2017-03-31
5 2017-04-25 0 2017-04-01
6 2017-05-24 0 2017-04-30
7 2017-05-25 2 2017-05-01
8 2017-05-26 0 2017-05-02
如您所见,Dat2中的三月日期仅从原始日期2017-03-25开始,依此类推。
1的值是在 3 月(Dat2),2的值是在 5 月(也是Dat2)。
然后,要计算例如按月计算的总和,我们可以运行:
df.groupby(pd.Grouper(key='Dat2', freq='MS')).sum()
得到:
Val
Dat2
2017-02-01 0
2017-03-01 1
2017-04-01 0
2017-05-01 2
所以我们有正确的分组:
- 1是在三月,
- 2是在五月。
与其他答案相比,优势在于您在一个月的第一天拥有所有日期,当然请记住,例如结果中的2017-03-01表示从2017-03-25到2017-04-24的期间(包含)。
推荐阅读
- android - 登录页面表单
- c - 为什么 subStr(charArr, 0, strlen(charArr)) 和 charArr 在使用 printf 时具有相同的输出,但在传递给函数时却不同?
- javascript - 查找对象键是否在数组javascript中
- python - 如何在 Popen 字符串中使用文件对象作为参数(文件只是一个变量,而不是实际文件)
- python - 从字符串到numpy数组
- css - 如何在不向父 div 添加额外空间的情况下添加边距
- html - 执行 HTTP 发布后 HTML 表不会自动更新
- javascript - RGraph折线图上特定点的不同颜色
- web3 - 当我使用 web3.eth.sendTransaction 时,连接不会自行关闭
- python - 如何将 ASCII 艺术压缩为运行长度为 2 的 RLE(或以相同的方式将 RLE 解压缩为 ascii)?