我正在尝试将一些数据分为四个星期,并使用pd.Grouper(key='created_at', freq='4W')
。我希望这些小组这样,如果我有从2019-08-26到2019-10-20的8周数据,则第一小组的范围是2019-08-26至2019-09-22,第二小组组的范围从2019-09-23到2019-10-20。但是,当使用石斑鱼时,它不会以这种方式进行分组,而是锚定到第一个星期日并从那里计算四个星期,从而产生如下输出:
created_at
2019-09-01 317
2019-09-29 990
2019-10-27 645
Freq: 4W-SUN, dtype: int64
代替:
created_at
2019-08-26 1048
2019-09-23 904
Freq: 4W-SUN, dtype: int64
我尝试过的另一种选择是使用pd.Timedelta(weeks=4)
作为频率,就像这样:
df.groupby(pd.Grouper(key='created_at', freq=pd.Timedelta(weeks=4)).size()
但是,这仅在数据中所有日期均可用时才有效。例如,如果数据直到2019-08-30才开始,则组标签会有所不同,因为它是从最早的日期开始计算增量的。我正在考虑创建一个自定义偏移对象,但是不确定这是否是正确的方向。
原始数据大致如下:
created_at
id
4324856 2019-08-26 12:38:51
4325472 2019-08-26 13:18:07
4325974 2019-08-26 13:47:09
4326205 2019-08-26 13:56:27
4326296 2019-08-26 13:57:35
带有与当前问题不相关的其他列。
答案 0 :(得分:0)
尝试在pd.Grouper()中添加参数closed='left'
。默认情况下,间隔的封闭结尾为'right'
df.groupby(pd.Grouper(key='created_at', freq='4W', closed='left')).size()