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