Python:按枚举日期堆叠以创建矢量化记录

Python:按枚举日期堆叠以创建矢量化记录,python,pandas,Python,Pandas,我有以下通用格式的数据帧: id,transaction_dt,units,measures 1,2018-01-01,4,30.5 1,2018-01-03,4,26.3 2,2018-01-01,3,12.7 2,2018-01-03,3,8.8 我试图完成的是根据同一记录中“units”字段的值堆叠和枚举“transaction_dt”,并将其展开到新记录中,以生成如下内容: id,transaction_dt,measures 1,2018-01-01,30.5 1,2018-01-

我有以下通用格式的数据帧:

id,transaction_dt,units,measures
1,2018-01-01,4,30.5
1,2018-01-03,4,26.3
2,2018-01-01,3,12.7
2,2018-01-03,3,8.8 
我试图完成的是根据同一记录中“units”字段的值堆叠和枚举“transaction_dt”,并将其展开到新记录中,以生成如下内容:

id,transaction_dt,measures
1,2018-01-01,30.5
1,2018-01-02,30.5
1,2018-01-03,30.5
1,2018-01-04,30.5
1,2018-01-03,26.3
1,2018-01-04,26.3
1,2018-01-05,26.3
1,2018-01-06,26.3
2,2018-01-01,12.7
2,2018-01-02,12.7
2,2018-01-03,12.7
2,2018-01-03,8.8
2,2018-01-04,8.8
2,2018-01-05,8.8 
date_range = pd.date_range('2004-01-01', '2017-12-31', freq='1D')
我一直在努力创建一个矢量化的性能版本来回答我之前的问题,有人在这里很友好地回答了这个问题:

这确实有效,但我有一个非常大的数据集来运行它,所以我需要投入更多的资金来优化它。他建议创建一个包含所有日期的数组,我可以这样做:

id,transaction_dt,measures
1,2018-01-01,30.5
1,2018-01-02,30.5
1,2018-01-03,30.5
1,2018-01-04,30.5
1,2018-01-03,26.3
1,2018-01-04,26.3
1,2018-01-05,26.3
1,2018-01-06,26.3
2,2018-01-01,12.7
2,2018-01-02,12.7
2,2018-01-03,12.7
2,2018-01-03,8.8
2,2018-01-04,8.8
2,2018-01-05,8.8 
date_range = pd.date_range('2004-01-01', '2017-12-31', freq='1D')
他建议,然后对数组重新编制索引,并以某种方式向前填充值。如果有人能帮助我,我将不胜感激

对于重复的行,您可以使用列
单位
loc
进行重复索引。最后每一个索引获取
count
by,转换并添加到列
transaction\u dt
。默认唯一索引的最后一项:

df = df.loc[np.repeat(df.index, df['units'])]
df['transaction_dt'] += pd.to_timedelta(df.groupby(level=0).cumcount(), unit='d')
df = df.reset_index(drop=True)
print (df)
    id transaction_dt  units  measures
0    1     2018-01-01      4      30.5
1    1     2018-01-02      4      30.5
2    1     2018-01-03      4      30.5
3    1     2018-01-04      4      30.5
4    1     2018-01-03      4      26.3
5    1     2018-01-04      4      26.3
6    1     2018-01-05      4      26.3
7    1     2018-01-06      4      26.3
8    2     2018-01-01      3      12.7
9    2     2018-01-02      3      12.7
10   2     2018-01-03      3      12.7
11   2     2018-01-03      3       8.8
12   2     2018-01-04      3       8.8
13   2     2018-01-05      3       8.8

@耶斯雷尔一流!目前正在运行,但似乎速度更快,内存利用率更好,等等。此外,令人难以置信的简洁/密集代码仍然非常可读。一如既往地感谢您分享您的专业知识。