重采样/时间分组到特定时间跨度/时间段

时间:2019-10-24 14:07:55

标签: python pandas pandas-groupby

我正在尝试将一些数据分为四个星期,并使用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

带有与当前问题不相关的其他列。

1 个答案:

答案 0 :(得分:0)

尝试在pd.Grouper()中添加参数closed='left'。默认情况下,间隔的封闭结尾为'right'

df.groupby(pd.Grouper(key='created_at', freq='4W', closed='left')).size()