Python Forum
Car Rental Scheduling and compatibility - Python
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Car Rental Scheduling and compatibility - Python
#1
The code only validating one car model, one compatibility model and all the booking schedule. I don’t know how to write the code to validate all car compatibility and schedule.

The goal is to reuse the car model and optimize the booking request by date, time and all car compatibility. Each day has several sessions. We currently have 8 car models; one car model is considered compatible with every single booking or needs. And to ensure that the rental runs smoothly, each session requires a car model assign.

I need to check availability of the car model by date
Check the all compatibility by each model.


Model Code= Car Brand
Model Session= Identify each individual future booking
Event Date= Future Booking Session
Start Time= Future Booking Start Time
End Time= Future Booking End Time
Car Type- Model type

Compatibility with model type and schedule
Letter A, B, C, D, E, F, G = 1 means its compatible with the booking
= 0 means isn’t compatible with the booking



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import pandas as pd
 
 
# In[2]:
 
 
df = pd.read_csv(r'C:\Users\XXXXXX\Documents\Car_Rental.csv')
 
 
# In[3]:
 
 
listA =['ACU','BMW','GM','FIA','JEE','FIA','HON','HYU','JEE','KTE']
listC = ['ACU','BMW','FIA','JEE','FIA','HON','HYU','JEE','KTE']
listD = ['ACU','BMW','FIA','JEE','FIA','HON','HYU','JEE']
listE = ['ACU','BMW','FIA']
listF =['ACU','BMW','FIA','JEE']
listG = ['ACU','BMW','GM','FIA','JEE']
 
df['A'] = df['Model Code'].apply(lambda x: 1 if x in listA else 0)
 
df['B'] = df['Model Code'].apply(lambda x: 1 if x in listA else 0)
df['C'] = df['Model Code'].apply(lambda x: 1 if x in listC else 0)
df['D'] = df['Model Code'].apply(lambda x: 1 if x in listD else 0)
df['E'] = df['Model Code'].apply(lambda x: 1 if x in listE else 0)
df['F'] = df['Model Code'].apply(lambda x: 1 if x in listF else 0)
df['G'] = df['Model Code'].apply(lambda x: 1 if x in listG else 0)
df
 
 
# In[4]:
 
 
def conflicts_eventdates_Modelcodes(x,y):
    du = df
    du['Start DateTime'] = pd.to_datetime(du['Start DateTime'])
    du['End Date/Time'] = pd.to_datetime(du['End Date/Time'])
    du['Event Date'] = pd.to_datetime(du['Event Date'])
    x=pd.to_datetime(x)
    start_times=[]
    end_times=[]
    Sessions= []
    count = 0
    dux = du[du[y] ==1]
    #print(dua)
    Sports =[]
    dux = dux[dux['Event Date'] == x]
    for i,j,k in zip(dux['Start DateTime'],dux['End Date/Time'],dux['Model Session']):
            count= count+1;
            start_times.append(i)
            end_times.append(j)
            Sessions.append(k)
    events = list(zip(start_times,end_times))
    times = []
    for event in events:
        startTime, endTime = event
        times.append((startTime, 'start'))
        times.append((endTime, 'end'))
    #print(events)
    times = sorted(times)
    count = 0
    maxCount = 0
    for time in times:
        if time[1] == 'start':
            count += 1
        else:
            count -= 1
        maxCount = max(count, maxCount)
    return maxCount
 
 
# In[5]:
 
 
conflicts_eventdates_Modelcodes('2020-07-23','A')
 
 
# In[6]:
 
 
df[df['A'] ==1]['Model Code'].unique()
 
 
# In[7]:
 
 
def conflicts_eventdates_Modelcodes1(x):
    du = df
    du['Start DateTime'] = pd.to_datetime(du['Start DateTime'])
    du['End Date/Time'] = pd.to_datetime(du['End Date/Time'])
    du['Event Date'] = pd.to_datetime(du['Event Date'])
    #x=pd.to_datetime(x)
    start_times=[]
    end_times=[]
    Sessions= []
    count = 0
    #dux = du[du[y] ==1]
    #print(dua)
    Sports =[]
    dux = du
    dux = dux[dux['Model Code'] == x]
    for i,j,k in zip(dux['Start DateTime'],dux['End Date/Time'],dux['Model Session']):
            count= count+1;
            start_times.append(i)
            end_times.append(j)
            Sessions.append(k)
    events = list(zip(start_times,end_times))
    times = []
    for event in events:
        startTime, endTime = event
        times.append((startTime, 'start'))
        times.append((endTime, 'end'))
    #print(events)
    times = sorted(times)
    count = 0
    maxCount = 0
    for time in times:
        if time[1] == 'start':
            count += 1
        else:
            count -= 1
        maxCount = max(count, maxCount)
    return maxCount
 
 
# In[8]:
 
 
conflicts_eventdates_Modelcodes1('BMW')
Reply
#2
Not sure about the code, it is hard to understand, at least, for me. However, you can
improve some steps, e.g. inclusion check could be done using .isin method, e.g.

1
df['B'] = df['Model Code'].isin(ListB) # optionally, you can convery bools to ints by applying `.astype(int)`
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020