Преобразование объекта во время и группировка / суммирование времени (H / M / S) в 24 часа - PullRequest
1 голос
/ 18 июня 2020

Я разделил большой фрейм данных на подмножество, нарезав только один столбец Start Time с помощью `type (object).

test = taxi_2020['Start Time']

Получил столбец

0          00:15:00
1          00:15:00
2          00:15:00
3          00:15:00
4          00:15:00
         ...   
4137289    00:00:00
4137290    00:00:00
4137291    00:00:00
4137292    00:00:00
4137293    00:00:00
Name: Start Time, Length: 4137294, dtype: object

Затем я сгруппировал и суммировал его по подсчету (насколько мне известно)

test.value_counts().sort_index().reset_index()

и получил два столбца

     index  Start Time
0   00:00:00    24005
1   00:15:00    22815
2   00:30:00    20438
3   00:45:00    19012
4   01:00:00    18082
... ... ...
91  22:45:00    32365
92  23:00:00    31815
93  23:15:00    29582
94  23:30:00    26903
95  23:45:00    24599

Не знаю, почему появился этот index столбец, теперь мне не удалось его переименовать или преобразовать.

Что я хотел бы увидеть?

Мой идеальный результат - группировать время по часам (24-часовой формат подходит), похоже, что данные подсчитываются каждые 15 минут, поэтому в основном помещаем каждый следующий 4 столбика вместе. 00:15:00 может быть как 0 час, 23:00:00 как 23rd час.

Мой идеальный результат:

Hour Rides
0    34000
1    60000
2    30000
3    40000

Я хотел бы впоследствии создать простую гистограмму чтобы показать возникновение по часам.

Благодарю за любую помощь!

Ответы [ 2 ]

1 голос
/ 18 июня 2020

IIU C,

#Create dummy input datafframe
test = pd.DataFrame({'time':pd.date_range('2020-06-01', '2020-06-01 23:59:00', freq='15T').strftime('%H:%M:%S'), 
              'rides':np.random.randint(15000,28000,96)})

Давайте создадим DateTimeIndex из строки и передискретизируем, объединим с суммой и преобразуем DateTimeIndex в часы:

test2 = (test.set_index(pd.to_datetime(test['time'], format='%H:%M:%S'))
             .rename_axis('hour').resample('H').sum())
test2.index = test2.index.hour
test2.reset_index()

Вывод:

    hour  rides
0      0  74241
1      1  87329
2      2  76933
3      3  86208
4      4  88002
5      5  82618
6      6  82188
7      7  81203
8      8  78591
9      9  95592
10    10  99778
11    11  85294
12    12  93931
13    13  80490
14    14  84181
15    15  71786
16    16  90962
17    17  96568
18    18  85646
19    19  88324
20    20  83595
21    21  89284
22    22  72061
23    23  74057
0 голосов
/ 18 июня 2020

Шаг за шагом я сам нашел ответ

Используя этот код, я переименовал столбцы

test.rename(columns = {'index': "Time", 'Start Time': 'Rides'})

Получил

Остающийся вопрос - как суммировать по часам.

После применения

test2['hour'] = pd.to_datetime(test2['Time'], format='%H:%M:%S').dt.hour
test2

Я подошел ближе

Наконец, я сгруппировал по часовому значению

test3 = test2.groupby('hour', as_index=False).agg({"Rides": "sum"})
print(test3)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...