У меня большой набор данных с двумя основными столбцами, включая код курьера и соответствующую дату и время доставки.
CourierTrips.head()
Courier Code Delivery Date Time
0 1232011104 2019/04/15 18:38
1 1232011104 2019/04/15 12:00
2 1232011076 2019/04/15 14:00
3 1232011076 2019/04/15 12:10
4 1102095903 2019/04/15 18:01
Я хочу указать время последней доставки каждогокурьер в каждый рабочий день. Сначала я разделил столбцы даты и времени на разные столбцы, используя два разных кода, чтобы один из кодов был очень быстрым, чем другой код:
Первый метод (очень медленный):
#Delivery Date
CourierTrips["Delivery_Date"]=""
for i in range(len(CourierTrips["Delivery_Date"])):
CourierTrips["Delivery_Date"][i]=CourierTrips['Delivery Date Time'][i][:10]
#Delivery Time
CourierTrips["Delivery_Time"]=""
for i in range(len(CourierTrips["Delivery_Time"])):
CourierTrips["Delivery_Time"][i]=CourierTrips['Delivery Date Time'][i][11::]
Второй метод (очень быстрый):
#Delivery Date
CourierTrips["Delivery_Date"]=[u[:10] for u in CourierTrips['Delivery Date Time']]
#Delivery Time
CourierTrips["Delivery_Time"]=[u[11::] for u in CourierTrips['Delivery Date Time']]
Оба вышеупомянутых кода имеют одинаковые результаты для разделения значений даты и времени, новторой метод работает намного быстрее первого.
Затем для определения последнего времени доставки каждого курьера в каждый рабочий день я должен вычислить максимальное значение столбца «Время доставки» за день. , для каждого конкретного кода курьера. Таким образом, я мог бы написать приведенный ниже код, чтобы сохранить результаты в столбце Время окончания.
CourierTrips["End_Time"]=""
for i in range(len(CourierTrips["End_Time"])):
CourierTrips["End_Time"][i]=max(CourierTrips[(CourierTrips['Courier Code']==CourierTrips['Courier Code'][i]) &
(CourierTrips["Delivery_Date"]==CourierTrips["Delivery_Date"][i])]['Delivery_Time'])
CourierTrips.head()
Courier Code Delivery Date Time Delivery_Date Delivery_Time End_Time
0 1232011104 2019/04/15 18:38 2019/04/15 18:38 21:10
1 1232011104 2019/04/15 12:00 2019/04/15 12:00 21:10
2 1232011076 2019/04/15 14:00 2019/04/15 14:00 21:05
3 1232011076 2019/04/15 12:10 2019/04/15 12:10 21:05
4 1102095903 2019/04/15 18:01 2019/04/15 18:01 19:45
Результаты приведенного выше кода верны, но, к сожалению, время выполнения кода слишком велико. Мой набор данных содержит более 1 миллиона записей, и приведенный выше код тратит МНОГО времени на результаты. Как я объяснил, я мог написать быстрый код для добавления столбцов даты и времени, но, к сожалению, я не смог найти хорошего решения для написания быстрого кода для вычисления значений столбца End_Time. Мой вопрос заключается в том, можно ли написать код, который тратит мало времени, чтобы показать результаты столбца End_Time? Буду признателен, если кто-нибудь сможет мне помочь, ответив на мой вопрос.