【发布时间】:2021-03-01 16:09:03
【问题描述】:
最小可重现示例
import numpy as np
import pandas as pd
np.random.seed(0)
dates = pd.date_range(start='1/1/2021', end='3/15/2021')
df = pd.DataFrame({'date': np.random.choice(dates, 1000),
'label': np.random.choice(['a', 'b', 'c'], 1000)})
结果
date label
0 2021-02-14 a
1 2021-02-17 c
2 2021-03-06 a
3 2021-03-09 c
4 2021-03-09 b
... ... ...
995 2021-03-06 c
996 2021-01-14 b
997 2021-01-02 a
998 2021-01-03 c
999 2021-03-08 b
我试图从最后观察到的日期开始每 4 周对日期列进行分组(在这种情况下,df['date'].max() 给出'3/15/2021',所以我希望按日期和标签分组时的最后日期为@987654326 @ 以及对其他日期进行相应调整(3/15 前 28 天、3/15 前 56 天等)。
但是,我无法使用 pd.Grouper 执行此操作。 According to the docs、pd.Grouper 采用 origin 参数来调整分组,但没有基于结束日期的选项。
有没有办法以类似于以下方式使用pd.Grouper:
df.groupby([pd.Grouper(key='date', freq='28d', label='right'), 'label'])['label'].count()
date label
2021-01-29 a 114
b 135
c 134
2021-02-26 a 125
b 133
c 123
2021-03-26 a 83
b 81
c 72
Name: label, dtype: int64
而是将最后一个按日期分组的 end 设置为 3/15(并且最后一个组包含自 3/15 以来 28 天的所有数据)?
【问题讨论】:
标签: python pandas date pandas-groupby