python - 如何按一天中的小时对时间序列进行分组?
问题描述
我有一个时间序列,我想按一天中的小时(不考虑日期)对行进行分组,并将它们可视化为箱线图。所以我想要从第 1 小时开始的 24 个箱线图,然后是第 2 小时,然后是第 3 小时,依此类推。
我看到这项工作的方式是将数据集分成 24 个系列(一天中的每个小时 1 个),为每个系列创建一个箱线图,然后将其绘制在相同的轴上。
我能想到的唯一方法是手动选择每小时之间的所有值,有更快的方法吗?
一些样本数据:
Date Actual Consumption
2018-01-01 00:00:00 47.05
2018-01-01 00:15:00 46
2018-01-01 00:30:00 44
2018-01-01 00:45:00 45
2018-01-01 01:00:00 43.5
2018-01-01 01:15:00 43.5
2018-01-01 01:30:00 43
2018-01-01 01:45:00 42.5
2018-01-01 02:00:00 43
2018-01-01 02:15:00 42.5
2018-01-01 02:30:00 41
2018-01-01 02:45:00 42.5
2018-01-01 03:00:00 42.04
2018-01-01 03:15:00 41.96
2018-01-01 03:30:00 44
2018-01-01 03:45:00 44
2018-01-01 04:00:00 43.54
2018-01-01 04:15:00 43.46
2018-01-01 04:30:00 43.5
2018-01-01 04:45:00 43
2018-01-01 05:00:00 42.04
这是我迄今为止尝试过的:
zero = df.between_time('00:00', '00:59')
one = df.between_time('01:00', '01:59')
two = df.between_time('02:00', '02:59')
然后我会在相同的轴上为每一个绘制一个箱线图。但是,一天 24 小时都这样做是非常乏味的。
这是我想要的那种输出: https ://www.researchgate.net/figure/Boxplot-of-the-NOx-data-by-hour-of-the-day_fig1_24054015
解决方案
有两个步骤可以实现这一目标:
将实际时间转换为日期时间:
df.Actual = pd.to_datetime(df.Actual)
按小时分组:
df.groupby([df.Date, df.Actual.dt.hour+1]).Consumption.sum().reset_index()
我假设您想对消耗进行求和(除非您希望平均或任何改变它)。注意:小时+1,因此它将从 1 而不是 0 开始(如果您希望 0 为午夜,请将其删除)。
期望的结果:
Date Actual Consumption
0 2018-01-01 1 182.05
1 2018-01-01 2 172.50
2 2018-01-01 3 169.00
3 2018-01-01 4 172.00
4 2018-01-01 5 173.50
5 2018-01-01 6 42.04
推荐阅读
- python - 使用 tensorflow-gpu 时出现导入错误
- css - 如何全局设置所有已设置 required="true" 的 PrimeFaces 输入组件的样式
- d3.js - 带加号的赋值运算符。(不是加法赋值运算符)
- android - 如何强制包含 ltr 字符的 textView 在 rtl 环境中右对齐
- node.js - 浏览器中未设置快速会话 cookie
- c# - 使用 C# RSACryptoServiceProvider 可以在容器中存储多个同名密钥
- typescript - 如何定义 TS 类型/接口/等。哪个可以通过多个文件访问?
- javascript - 在 React 中映射多个道具
- postgresql - 重定向输出时 PSQL 不同的结果
- angularjs - 从 url 参数打开 data-ng-click 功能