首页 > 解决方案 > 按小时间隔查找平均人数,Panda/Numpy

问题描述

我有一个名为“Work.csv”的 csv 文件。一个人在 10 月份注册工作的时间(有很多条目)。

MONTH   YEAR    DATE      TIME
Oct    2011  20/10/2011  22:04:52
Oct    2011  26/10/2011  11:15:16
Oct    2011  11/10/2011  10:52:52
Oct    2011  11/10/2011  16:40:06

我希望找到每小时间隔注册工作的平均人数。例如。从凌晨 12 点到凌晨 1 点、凌晨 1 点到凌晨 2 点……等注册的平均人数。

我使用 dt.hour 尝试了自己的代码,并且只设法获得了特定小时内总人数的频率计数。

我似乎无法获得平均值。

我想要的输出是:

Hour        Average Number of People
0                    40
1                    50
2                    65
3                    30
4                    30

请帮忙!

标签: pythonpandasnumpy

解决方案


首先,您应该将 TIME 列转换为 DateTime。然后按时间和日期分组,找出每个日期每小时有多少人工作。最后,再次按小时分组并获得平均值:

df.groupby([pd.to_datetime(df.TIME).dt.hour, df.DATE]).size()\ # raw counts
  .groupby('TIME').mean() # mean counts
#TIME
#10    1
#11    1
#16    1
#22    1

感谢@Wen(他总是乐于助人),一个更紧凑(可能效率更低)的选项:

df.groupby([pd.to_datetime(df.TIME).dt.hour, df.DATE]).size()\
  .mean(level='TIME') 

推荐阅读