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