【发布时间】:2018-08-23 04:47:45
【问题描述】:
我正在尝试从日期范围的末尾而不是从开头进行聚合。尽管我认为将 closed='right' 添加到 grouper 可以解决问题,但事实并非如此。请让我知道如何实现底部显示的所需输出,谢谢。
import pandas as pd
df = pd.DataFrame(columns=['date','number'])
df['date'] = pd.date_range('1/1/2000', periods=8, freq='T')
df['number'] = pd.Series(range(8))
df
date number
0 2000-01-01 00:00:00 0
1 2000-01-01 00:01:00 1
2 2000-01-01 00:02:00 2
3 2000-01-01 00:03:00 3
4 2000-01-01 00:04:00 4
5 2000-01-01 00:05:00 5
6 2000-01-01 00:06:00 6
7 2000-01-01 00:07:00 7
通过 groupby 和日期的聚合,我得到以下信息。由于我有 8 个日期并且我按 3 个周期进行分组,因此它必须选择是截断最早的日期组还是最旧的日期组,并且它选择最旧的日期组(最旧的日期组的计数为 2):
df.groupby(pd.Grouper(key='date', freq='3T')).agg('count')
date number
2000-01-01 00:00:00 3
2000-01-01 00:03:00 3
2000-01-01 00:06:00 2
我想要的输出是截断 最早 日期组:
date number
2000-01-01 00:00:00 2
2000-01-01 00:02:00 3
2000-01-01 00:05:00 3
请让我知道如何实现这一点,我希望只有一个可以设置的参数被我忽略了。请注意,这类似于this 问题,但我的问题是针对日期截断的。
编辑:为了重新构建问题(感谢 Alexdor),pandas 中的默认行为是按 [0, 3)、[3, 6)、[6, 9) 周期分箱,但我想按 ( -1, 2], (2, 5], (5, 8]
【问题讨论】:
-
@jpp 这不会解决问题,因为日期不会像我想要的输出那样。但如果我误解你,请纠正我。
标签: python pandas aggregate pandas-groupby