我有一个数据框,其中包含具有不同订单日期的合同,如果每个合同有多个订单日期,我需要创建一个新列,为每个合同分配一个数字。例如,我的示例数据框如下所示:
df = pd.DataFrame({'contract': ['123A','123A','123A','123A','123B','123B','123C'],'prod': ['X1','M1','V1','D1','A1','B1','C1'],'date':['2019-04-17','2019-07-02','2019-04-17','2019-07-02','2019-04-17','2019-09-01','2019-08-02'],'revenue': [5688,113932,5688,49157,5002,892,9000]})
我需要我的决赛桌有另一个列,每个日期都有一个唯一的合同 ID。我上面的决赛桌应该是这样的:
| 合同 | 日期 | header_contract |
|---|---|---|
| 123A | 2019-04-17 | 123A_0 |
| 123A | 2019-07-02 | 123A_1 |
| 123A | 2019-04-17 | 123A_0 |
| 123A | 2019-08-02 | 123A_2 |
我有以下代码可以在较小的数据集上完成我需要的操作:
contracts_num = df['contract'].unique()
for cm in contracts_num:
for idx,val in enumerate(df[df['contract'] == cm]['contract'].dt.date.unique()):
df.loc[((df['contract'] == cm) & (df['contract'] == str(val))),'contract'] = df['contract'] + '_' + str(idx)
我正在尝试在更大的数据集(大约 50,000 个合同)上进行此操作,并且需要很长时间。有没有办法让它更有效率?