Получение общего количества другого столбца с использованием определенного дня в месяц?

#python-3.x #pandas #data-science

#python-3.x #панды #наука о данных

Вопрос:

    VendorID tpep_pickup_datetime tpep_dropoff_datetime  passenger_count  PULocationID  DOLocationID  fare_amount
0       1.0  2020-01-01 00:28:15   2020-01-01 00:33:03              1.0           238           239          6.0
1       1.0  2020-01-01 00:35:39   2020-01-01 00:43:04              1.0           239           238          7.0
2       1.0  2020-01-01 00:47:41   2020-01-01 00:53:52              1.0           238           238          6.0
3       1.0  2020-01-01 00:55:23   2020-01-01 01:00:14              1.0           238           151          5.5
4       2.0  2020-01-01 00:01:58   2020-01-01 00:04:16              1.0           193           193          3.5
5       2.0  2020-01-01 00:09:44   2020-01-01 00:10:37              1.0             7           193          2.5
6       2.0  2020-01-01 00:39:25   2020-01-01 00:39:29              1.0           193           193          2.5
7       1.0  2020-01-01 00:29:01   2020-01-01 00:40:28              2.0           246            48          8.0
8       1.0  2020-01-01 00:55:11   2020-01-01 01:12:03              2.0           246            79         12.0
9       1.0  2020-01-01 00:37:15   2020-01-01 00:51:41              1.0           163           161          9.5
 

У меня есть эти данные за январь 2020 года (охватывает весь месяц, это всего лишь фрагмент), я хочу ответить на вопрос типа «Суббота — самый загруженный день с точки зрения приема пассажиров».
Как мне это сделать?
тип данных столбца с метками ‘tpep_pickup_datetime’ и ‘tpep_dropoff_datetime’ относятся к объектному типу.

Комментарии:

1. Я думаю, сначала вам нужно преобразовать tpep_pickup_datetime в pandas datetime . Затем найдите day_name значение даты и времени. Группируйте day_name и проверяйте максимальное passenger_count значение. Это будет самый загруженный день.

Ответ №1:

Первые данные были изменены для разных дат в столбце tpep_pickup_datetime для лучшей выборки:

 print (df)
   VendorID tpep_pickup_datetime tpep_dropoff_datetime  passenger_count  
0       1.0  2020-01-01 00:28:15   2020-01-01 00:33:03              1.0   
1       1.0  2020-01-02 00:35:39   2020-01-01 00:43:04              1.0   
2       1.0  2020-01-02 00:47:41   2020-01-01 00:53:52              1.0   
3       1.0  2020-01-03 00:55:23   2020-01-01 01:00:14              1.0   
4       2.0  2020-01-03 00:01:58   2020-01-01 00:04:16              1.0   
5       2.0  2020-01-03 00:09:44   2020-01-01 00:10:37              1.0   
6       2.0  2020-01-04 00:39:25   2020-01-01 00:39:29              1.0   
7       1.0  2020-01-04 00:29:01   2020-01-01 00:40:28              2.0   
8       1.0  2020-01-04 00:55:11   2020-01-01 01:12:03              2.0   
9       1.0  2020-01-05 00:37:15   2020-01-01 00:51:41              1.0   

   PULocationID  DOLocationID  fare_amount  
0           238           239          6.0  
1           239           238          7.0  
2           238           238          6.0  
3           238           151          5.5  
4           193           193          3.5  
5             7           193          2.5  
6           193           193          2.5  
7           246            48          8.0  
8           246            79         12.0  
9           163           161          9.5 
 

Преобразуйте столбец в datetimes, получите имена дней Series.dt.day_name и агрегируйте sum :

 df['tpep_pickup_datetime'] = pd.to_datetime(df['tpep_pickup_datetime'])

df['day'] = df['tpep_pickup_datetime'].dt.day_name()

s = df.groupby('day')['passenger_count'].sum()
print (s)
day
Friday       3.0
Saturday     5.0
Sunday       1.0
Thursday     2.0
Wednesday    1.0
Name: passenger_count, dtype: float64
 

Затем для индекса, здесь название дня максимального использования значения Series.idxmax , для максимального использования значения max :

 print (s.idxmax())
Saturday

print (s.max())
5.0
 

И если нужно, можно использовать оба Series.agg :

 print (s.agg(['idxmax','max']))
idxmax    Saturday
max              5
Name: passenger_count, dtype: object
 

Комментарии:

1. Как мне связать количество пассажиров с подбором пассажиров (это метка PULocationID) или высадкой пассажиров (DOLocationID)?

2. @waithira — Нелегко понять, вам нужно df.groupby(['day','PULocationID'])['passenger_count'].sum() ? И тогда print (s.idxmax()[0]) или print (s.groupby(level=1).idxmax()) ?

3. в случае, если я хочу ответить на этот вопрос, вторник — самый загруженный день с точки зрения высадки пассажиров.?

4. passenger_count включен плюс фильтр для идентификатора PULocationID

5. @waithira — Я думаю, что здесь большая проблема с вашими данными — все данные, 2020-01-01 так насколько это возможно Tuesday ? Возможно ли изменить данные — удалить не важные столбцы и изменить даты и время, как в моем ответе с изменением PULocationID , DOLocationID ? Потому что теперь все сводится к угадыванию, что нужно (поскольку данные не могут быть проверены)