Сводная таблица панд и групповой месяц и час - PullRequest
0 голосов
/ 18 октября 2018

У меня есть данные в этом формате: Снимок экрана с фреймом данных

Я должен создать столбцы подсчета идентификаторов для каждой области (север, юг, середина) в час длякаждый месяц.Например, я должен построить 12 отдельных графиков ежечасного подсчета id для «Севера» за январь - декабрь.

import numpy as np
from datetime import time,datetime,timedelta
df.Datetime = pd.to_datetime(Datetime) 
df.groupby('AREA')
North = df.get_group('North')
Middle = df.get_group('Middle')
South = df.get_group('South') 
North = pd.pivot_table(North,index='Datetime', values='id', aggfunc=[np.sum])

Я застрял и не уверен, как продолжить.Я подумываю сделать что-то вроде 'North.groupby (pd.Grouper (key =' Datetime ', freq =' H ')) ", но это не работает, так как я уже проиндексировал datetime.Как я могу сгруппировать по месяцам и часам из кадра данных «Север»?

Благодарим вас за помощь, спасибо!

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Для различного количества идентификаторов:

Данные ['Месяц'] = Данные ['Дата / время']. ​​Применять (лямбда x: x.month)

Данные ['Час']= Data ['Datetime']. Apply (лямбда x: x.hour)

Data = pd.DataFrame ({'count': Data.groupby (["Month", "Hour", "Area")]) [ "ID"]. nunique ()}). reset_index ()

0 голосов
/ 18 октября 2018
df = pandas.DataFrame([
['2017-01-10 08:40:00', 1, 'North'],
['2017-01-10 08:30:00', 1, 'North'],
['2017-01-10 08:40:00', 1, 'North'],
['2017-01-10 15:40:00', 2, 'North'],
['2017-01-10 07:30:00', 2, 'North'],
['2017-01-10 08:40:00', 3, 'North'],
['2017-01-10 08:40:00', 1, 'Middle'],
['2017-01-10 08:30:00', 1, 'Middle'],
['2017-01-10 08:40:00', 1, 'Middle'],
['2017-01-11 16:40:00', 2, 'South'],
['2017-01-11 08:30:00', 2, 'South'],
['2017-01-11 07:40:00', 3, 'South'],
['2017-01-10 08:40:00', 2, 'South'],
['2017-01-10 08:40:00', 2, 'South'],
['2017-01-10 08:40:00', 3, 'South'],
['2017-01-10 08:40:00', 1, 'South']], columns=['Datetime', 'id', 'Area'])

Вам нужно проанализировать свои даты и затем создать два дополнительных столбца, содержащих время и дату.Это зависит от того, сколько анализа данных вы будете выполнять после того, как, если вы будете анализировать его к определенному времени в разные дни, это может быть хорошим подходом:

df['Datetime'] = [datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S') for x in df['Datetime'].tolist()]
df['Date'] = [x.strftime('%Y-%m-%d') for x in df['Datetime'].tolist()]
df['Time'] = ['%s:00' % x.strftime('%H') for x in df['Datetime'].tolist()]

Затем вы просто группируете и разбираете свой фрейм данных

df_1 = df.groupby(['Date', 'Time', 'id', 'Area']).count().unstack(['Area', 'id'])

и, наконец, вы строите свои данные

df_1.plot(kind='bar')

enter image description here

...