Python 在sales db中重新定义索引列

Python 在sales db中重新定义索引列,python,pandas,data-cleaning,Python,Pandas,Data Cleaning,我一直在清理这个销售数据库,那里的数据是从多个来源收集的,账单编号混乱不堪,但它们是将多个订单引用到同一账单的唯一列,然而随着时间的推移,使用不同的系统会导致重复的账单编号 为了解决这一问题,我需要为日期不同的账单编号单元格提供一个新编号,例如,如果我有一张1号账单,日期在2019年,另一张账单的编号相同,但在2018年,我需要为其提供一个不同的账单编号 df样本: bill_no item_ser date ite

我一直在清理这个销售数据库,那里的数据是从多个来源收集的,账单编号混乱不堪,但它们是将多个订单引用到同一账单的唯一列,然而随着时间的推移,使用不同的系统会导致重复的账单编号

为了解决这一问题,我需要为日期不同的账单编号单元格提供一个新编号,例如,如果我有一张1号账单,日期在2019年,另一张账单的编号相同,但在2018年,我需要为其提供一个不同的账单编号

df样本:

       bill_no  item_ser                date                  item size   price
0         1       111 2018-12-15 15:09:50          Rockla Salad    R   39.00
1         1       111 2018-12-15 15:09:50          Rockla Salad    R   39.00
2         1       112 2018-12-15 15:10:16                   Tea    R    8.00
3         1       112 2018-12-15 15:10:16                   Tea    R    8.00
4         1       309 2019-02-21 10:02:24            Eggs Toast    R   35.00
5         1       309 2019-02-21 10:02:24            Eggs Toast    R   35.00
6         1         1 2020-07-20 12:38:16      Nody's Sfilatino    R   99.75
7         1         1 2020-07-20 12:38:16      Nody's Sfilatino    R   99.75
8         1      2715 2020-05-06 01:13:41  Basilico Buffalo - R    R  110.00
9         1      2715 2020-05-06 01:13:41  Basilico Buffalo - R    R  110.00
10        1      2716 2020-05-06 01:13:41   Timmy's Merguez - R    R  130.00
11        1      2716 2020-05-06 01:13:41   Timmy's Merguez - R    R  130.00
12        1      2717 2020-05-06 01:13:41            Funghi - R    R  105.00
13        1      2717 2020-05-06 01:13:41            Funghi - R    R  105.00
14        1      2718 2020-05-06 01:13:41          Extra Cheese    R   20.00
15        1      2718 2020-05-06 01:13:41          Extra Cheese    R   20.00
16        1         8 2020-07-05 16:27:37        Margherita - R    R   65.00
17        1         8 2020-07-05 16:27:37        Margherita - R    R   65.00
18        1         9 2020-07-05 16:27:39      Extra Vegetables    R   10.00
19        1         9 2020-07-05 16:27:39      Extra Vegetables    R   10.00
20        1        10 2020-07-05 16:27:40       Extra Mushrooms    R   20.00
21        1        10 2020-07-05 16:27:40       Extra Mushrooms    R   20.00
22        2        11 2020-07-05 16:36:31          Marinara - R    R   55.00
23        2        11 2020-07-05 16:36:31          Marinara - R    R   55.00
24        2        12 2020-07-05 16:36:38   Timmy's Merguez - R    R  130.00
25        2        12 2020-07-05 16:36:38   Timmy's Merguez - R    R  130.00
26        2        77 2018-12-15 16:25:19                   Can    R   12.00
27        2        77 2018-12-15 16:25:19                   Can    R   12.00
28        2        78 2018-12-15 16:25:34        Margherita - L    L   63.00
29        2        78 2018-12-15 16:25:34        Margherita - L    L   63.00
30        2        79 2018-12-15 16:25:40        Margherita - R    R   45.00
31        2        79 2018-12-15 16:25:40        Margherita - R    R   45.00
32        2     11172 2019-11-26 12:26:46        Margherita - L    L   75.00
33        2     11172 2019-11-26 12:26:46        Margherita - L    L   75.00
34        2         2 2020-07-20 12:38:32      Nody's Sfilatino    R   99.75
35        2         2 2020-07-20 12:38:32      Nody's Sfilatino    R   99.75
36        2      2719 2020-05-06 01:25:21  Basilico Buffalo - L    L  135.00
37        2      2719 2020-05-06 01:25:21  Basilico Buffalo - L    L  135.00
38        2      2720 2020-05-06 01:25:21        Gamberetti - L    L  175.00
39        2      2720 2020-05-06 01:25:21        Gamberetti - L    L  175.00
40        2      2721 2020-05-06 01:25:21          Marinara - L    L   70.00
41        2      2721 2020-05-06 01:25:21          Marinara - L    L   70.00
42        2      2722 2020-05-06 01:25:21          Marinara - L    L   70.00
43        2      2722 2020-05-06 01:25:21          Marinara - L    L   70.00
44        2      2723 2020-05-06 01:25:21            Flat White    R   35.00
45        2      2723 2020-05-06 01:25:21            Flat White    R   35.00
46        2      2724 2020-05-06 01:25:21            Flat White    R   35.00
47        2      2724 2020-05-06 01:25:21            Flat White    R   35.00
48        2      2725 2020-05-06 01:25:21           Banana Milk    R   40.00
49        2      2725 2020-05-06 01:25:21           Banana Milk    R   40.00

我尝试了循环,但有15万行,这需要很多时间。

这很有效,但因为日期中有时间,我需要在日期上聚合,忽略至少分和秒,因为有些订单需要几分钟以上的时间才能注册。是否要忽略
分和
秒,并保持
小时
date
?我认为这并不重要,也许我应该创建一个额外的列,只包含日期,不带时间戳,并在此基础上进行聚合。这样行吗?行,行。如果每个
日期都有唯一的
账单号
。如果在每个
日期
中,可能有多张
账单
具有相同的
账单编号
,则建议使用带有时间的日期。如果要链接接近但不相同的时间戳,可以使用
合并asof()
# Get new_bill_no on the basis of [bill_no, date]
df1 = df[['bill_no', 'date']].drop_duplicates().reset_index()
df1.rename({'index': 'new_bill_no'}, axis=1, inplace=True)

# On Merging you will get new_bill_no in original df
df = df.merge(df1, on=['bill_no', 'date'], how='left'])