#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
в pandasdatetime
. Затем найдите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
? Потому что теперь все сводится к угадыванию, что нужно (поскольку данные не могут быть проверены)