为 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
我有一个包含多个 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