У меня есть датафрейм, df после преобразования столбца DateTimeC в тип datetime, такой как:
Index DateTimeC eventName
0 2017-08-20 01:11:24.210000 ABC
1 2017-08-20 01:11:30.224000 CDE
2 2017-08-20 02:16:30.210000 CDE
3 2017-08-20 02:27:30.211000 CDE
2 2017-09-10 01:30:40.212000 DEF
3 2017-09-11 01:35:23.122000 CDE
4 2017-09-11 02:22:22.145000 CDE
5 2017-09-16 02:26:11.222000 DEF
Я намерен сгруппировать по месяцам и часам и подсчитать количество событий в eventName в сгруппированном объекте. Так что применяя этот код:
df2=df.groupby([df['DateTimeC'].dt.month,df['DateTimeC'].dt.hour])['EventName'].count()
Я получаю:
Index EventName
8,1 2
8,2 2
9,1 2
9,2 2
Однако я хочу использовать pivot_table () для результирующего ряда как месяц в качестве индекса и час в качестве столбца, в то время как значение параметра должно быть частотой. Таким образом, результирующий кадр данных должен быть:
Index 0 1 2 3 4 5 6 7 8... 24
8 0 2 2 0 0 0 0 0 0... 0
9 0 2 2 0 0 0 0 0 0... 0
Так, что будет соответствующим аргументом для параметров
pivot_table (), поскольку дата и время находятся в одном столбце: DateTimeC
Я попытался добавить rename_index, чтобы переименовать столбец для результата частоты / счетчика, чтобы я мог передать новое имя параметру 'value' в pivot_table (), используя этот код:
df2=df.groupby([df['DateTimeC'].dt.month,df['DateTimeC'].dt.hour])['EventName'].count().reset_index(name='frequency')
но я получаю эту ошибку:
ValueError: cannot insert DateTimeC, already exists
Кроме того, получите среднее значение за час для каждого месяца и преобразуйте число, связанное с конкретным месяцем, в его эквивалент слова
Index averagePerHour
August 0.17
September 0.17