为 Python 中的每个组创建日期序列 3

Creating a sequence of dates for each group in Python 3

我有一个包含多个 stores/retailers:

的数据集
RETAILER    VOLUME  DISP    PRICE
store1      12      15      10
store1      10      8       17
store1      12      13      12
...
store2      22      22      30
store2      17      14      22
store2      23      18      18
...
store3      11      13      10
store3      12      13      13
store3      14      12      11

不幸的是,这个数据集不包含日期,所以我需要为这个 table 中的每个商店生成日期序列。频率并不是那么重要 - 几天或几个月都可以。

为方便起见,我们假设它从 2000 年 1 月 1 日开始,每个 RETAILER 的日期数取决于该 RETAILER 的观察次数。

我可以在 R 中处理:

df <- df %>% 
  arrange(RETAILER) %>% 
  group_by(RETAILER) %>%  
  mutate(dates = seq(as.Date("2000-01-01"), by = "month", length.out = n()))

但是,我无法在 Python 中复制它。我一直在尝试 pd.date_range(),但找不到解决方案。

任何人都可以在 Python 中提出一些执行此任务的方法吗?

期望的输出:

RETAILER    VOLUME  DISP    PRICE   DATE
store1      12      15      10      2000-01-01
store1      10      8       17      2000-02-01
store1      12      13      12      2000-03-01
...
store2      22      22      30      2000-01-01
store2      17      14      22      2000-02-01
store2      23      18      18      2000-03-01
...
store3      11      13      10      2000-01-01
store3      12      13      13      2000-02-01
store3      14      12      11      2000-03-01

让我们 group RETAILER 上的数据帧并使用 cumcount 根据 RETAILER 创建顺序计数器然后 map 这个计数器到 MonthBegin 偏移并添加一个 Timestamp('2000-01-01'):

c = df.groupby('RETAILER').cumcount()
df['DATE'] = pd.Timestamp('2000-01-01') + c.map(pd.offsets.MonthBegin)

  RETAILER  VOLUME  DISP  PRICE       DATE
0   store1      12    15     10 2000-01-01
1   store1      10     8     17 2000-02-01
2   store1      12    13     12 2000-03-01
3   store2      22    22     30 2000-01-01
4   store2      17    14     22 2000-02-01
5   store2      23    18     18 2000-03-01
6   store3      11    13     10 2000-01-01
7   store3      12    13     13 2000-02-01
8   store3      14    12     11 2000-03-01