Pandas 熊猫数据透视表和分组(按月份和小时)

Pandas 熊猫数据透视表和分组(按月份和小时),pandas,group-by,pivot-table,pandas-groupby,python-datetime,Pandas,Group By,Pivot Table,Pandas Groupby,Python Datetime,我有以下格式的数据: 我必须为每个月的每个区域(北部、南部、中部)每小时创建id计数的条形图。例如,我必须在1月至12月期间,每小时为“北方”绘制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 = d

我有以下格式的数据:

我必须为每个月的每个区域(北部、南部、中部)每小时创建id计数的条形图。例如,我必须在1月至12月期间,每小时为“北方”绘制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编制了索引。如何从数据帧“North”按月和小时分组

如果有人能帮忙,我将不胜感激,谢谢

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'])
您需要解析datetimes,然后创建另外两个包含时间和日期的列。 这取决于您将在之后进行多少数据分析,如果您将在不同的日子中在给定的时间进行分析,这可能是一个很好的方法:

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')

对于ID的不同计数:

数据['Month']=数据['Datetime']。应用(λx:x.Month)

数据['Hour']=数据['Datetime']。应用(λx:x.Hour)

Data=pd.DataFrame({'count':Data.groupby([“月”、“小时”、“区域”])[“id”].nunique()}).reset_index()