【问题标题】:Resampling/time groupby to a specific time span/period重新采样/时间分组到特定的时间跨度/周期
【发布时间】:2019-10-24 14:07:55
【问题描述】:

我正在尝试将一些数据分组到每四个星期一次的存储桶中,并使用pd.Grouper(key='created_at', freq='4W')。我希望这些组是这样的,如果我有从 2019 年 8 月 26 日到 2019 年 10 月 20 日的 8 周数据,第一组的范围从 2019 年 8 月 26 日到 2019 年 9 月 22 日,第二组分组范围从 2019-09-23 到 2019-10-20。但是,在使用 grouper 时,它不会以这种方式分组,而是锚定到第一个星期日并从那里计算四个星期,从而产生如下输出:

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 年 8 月 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

包含与当前问题无关的附加列。

【问题讨论】:

  • 您的原始输入是什么样的?

标签: python pandas pandas-groupby


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 2020-10-28
    • 2012-09-16
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多