groupby_dynamic 自行设计索引

groupby_dynamic with selfdesigned index

如何制作类似groupby_dynamic 但可以支持用户定义的索引

groupby_dynamic可以支持timeindex做一个resample的操作

但是只能支持范围不重复的方式,比如

time
day1   9:00
day1 15:00
day2  9:00
day2  15:00
day3  9:00
day3 15:00

动态 groupby 到 1D


day1  9:00
day1 15:00
--------------
day2  9:00
day2  15:00
-------------
day3  9:00
day3 15:00

我问的功能是一个更加用户自定义的动态分组方式,索引可能会重复

day1  9:00
day1 15:00

day2  9:00
day2  15:00
-------------
day2  9:00
day2  15:00
day3  9:00
day3 15:00
--------------

我可以在一系列中使用滚动,但是 rolling_apply 浪费很多时间因为它滚动每个索引

day1  9:00
day1 15:00

day2  9:00
day2  15:00
-------------
day1 15:00
day2  9:00
day2  15:00
day3  9:00      
--------------  -------> this window is useless
day2  9:00
day2  15:00
day3  9:00
day3  15:00
-------------

day2  15:00
day3  9:00
day3  15:00
day4  9:00   
------------  -------> this window is useless

example pic

解决方法是在每个 || 之间给一个不同的值期间。

  • every决定索引的输出。

  • periods 给出了你需要的 window。

例子

import datetime
df = pl.DataFrame(
    {
      "time": pl.date_range(
           low=datetime.datetime(2021, 12, 16),
            high=datetime.datetime(2021, 12, 22),
            interval="12h",
         ),
         "n": [1 for i in range(13)]
}
 )

df.groupby_dynamic('time', period='2d', every='1d',include_boundaries=True,truncate=False,closed='right').agg( pl.col('n').sum())