Pandas 数据透视表和分组按月和小时

Posted

技术标签:

【中文标题】Pandas 数据透视表和分组按月和小时【英文标题】:Pandas pivot table and groupby month and hour 【发布时间】:2019-03-23 01:51:15 【问题描述】:

我有这种格式的数据:Screenshot of dataframe

我必须每个月每小时为每个区域(北、南、中)创建 id 计数的条形图。例如,我必须在 1 月至 12 月期间为“North”每小时绘制 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'))' 的事情,但它不起作用,因为我已经索引了日期时间。如何从数据框“North”按月和小时分组?

如果有人可以提供帮助,谢谢!

【问题讨论】:

【参考方案1】:
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()]

然后你只需 groupby 和 unstack 你的数据框

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

最后你绘制你的数据

df_1.plot(kind='bar')

【讨论】:

【参考方案2】:

对于不同的 id 计数:

Data['Month'] = Data['Datetime'].apply(lambda x:x.month)

Data['Hour'] = Data['Datetime'].apply(lambda x:x.hour)

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

【讨论】:

以上是关于Pandas 数据透视表和分组按月和小时的主要内容,如果未能解决你的问题,请参考以下文章

具有多索引的 Pandas 子数据透视表和总数据透视表

数据透视表和分组依据

Pandas 数据透视表和小计

Python数据分析pandas之分组统计透视表

SQL按月统计,按日分组

快速入门pandas进行数据挖掘数据分析[多维度排序数据筛选分组计算透视表]