@@ -140,4 +140,53 @@ WHERE request_at BETWEEN '2013-10-01' AND '2013-10-03'
140
140
GROUP BY request_at;
141
141
```
142
142
143
+ ### ** Pandas**
144
+
145
+ ``` python
146
+ import pandas as pd
147
+
148
+
149
+ def trips_and_users (trips : pd.DataFrame, users : pd.DataFrame) -> pd.DataFrame:
150
+ # 1) temporal filtering
151
+ trips = trips[trips[" request_at" ].between(" 2013-10-01" , " 2013-10-03" )].rename(
152
+ columns = {" request_at" : " Day" }
153
+ )
154
+
155
+ # 2) filtering based not banned
156
+ # 2.1) mappning the column 'banned' to `client_id` and `driver_id`
157
+ df_client = (
158
+ pd.merge(trips, users, left_on = " client_id" , right_on = " users_id" , how = " left" )
159
+ .drop([" users_id" , " role" ], axis = 1 )
160
+ .rename(columns = {" banned" : " banned_client" })
161
+ )
162
+ df_driver = (
163
+ pd.merge(trips, users, left_on = " driver_id" , right_on = " users_id" , how = " left" )
164
+ .drop([" users_id" , " role" ], axis = 1 )
165
+ .rename(columns = {" banned" : " banned_driver" })
166
+ )
167
+ df = pd.merge(
168
+ df_client,
169
+ df_driver,
170
+ left_on = [" id" , " driver_id" , " client_id" , " city_id" , " status" , " Day" ],
171
+ right_on = [" id" , " driver_id" , " client_id" , " city_id" , " status" , " Day" ],
172
+ how = " left" ,
173
+ )
174
+ # 2.2) filtering based on not banned
175
+ df = df[(df[" banned_client" ] == " No" ) & (df[" banned_driver" ] == " No" )]
176
+
177
+ # 3) counting the cancelled and total trips per day
178
+ df[" status_cancelled" ] = df[" status" ].str.contains(" cancelled" )
179
+ df = df[[" Day" , " status_cancelled" ]]
180
+ df = df.groupby(" Day" ).agg(
181
+ {" status_cancelled" : [(" total_cancelled" , " sum" ), (" total" , " count" )]}
182
+ )
183
+ df.columns = df.columns.droplevel()
184
+ df = df.reset_index()
185
+
186
+ # 4) calculating the ratio
187
+ df[" Cancellation Rate" ] = (df[" total_cancelled" ] / df[" total" ]).round(2 )
188
+ return df[[" Day" , " Cancellation Rate" ]]
189
+
190
+ ```
191
+
143
192
<!-- tabs:end -->
0 commit comments