python - 我如何将时间戳列分组为每小时并聚合熊猫数据框中的行
问题描述
我有一个包含每分钟数据的数据框,它还包含一个date
用于以时间戳格式跟踪日期的列。
在这里,我试图按小时而不是分钟来聚合数据。
我尝试了以下有效的代码,但它需要根据我不想要的列进行索引,因为这样我就无法使用函数date
遍历数据框。df.loc
import pandas as pd
from datetime import datetime
import numpy as np
date_rng = pd.date_range(start='1/1/2018', end='1/08/2018', freq='T')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))
df.set_index('date')
df.index = pd.to_datetime(df.index, unit='s')
df = df.resample('H').sum()
df.head(15)
我也试过 groupby 但它不起作用,下面是代码。
df.groupby([df.date.dt.hour]).data.sum()
print(df.head(15))
我如何在date
不对其进行索引的情况下进行分组?
谢谢。
解决方案
尝试pd.Grouper
指定freq
参数:
df.groupby([pd.Grouper(key='date', freq='1H')]).sum()
完整代码:
import pandas as pd
from datetime import datetime
import numpy as np
date_rng = pd.date_range(start='1/1/2018', end='1/08/2018', freq='T')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0, 100, size=(len(date_rng)))
print(df.groupby([pd.Grouper(key='date', freq='1H')]).sum())
# data
# date
# 2018-01-01 00:00:00 2958
# 2018-01-01 01:00:00 3084
# 2018-01-01 02:00:00 2991
# 2018-01-01 03:00:00 3021
# 2018-01-01 04:00:00 2894
# ... ...
# 2018-01-07 20:00:00 2863
# 2018-01-07 21:00:00 2850
# 2018-01-07 22:00:00 2823
# 2018-01-07 23:00:00 2805
# 2018-01-08 00:00:00 25
# [169 rows x 1 columns]
希望有帮助!
推荐阅读
- node.js - 无法将“文档”对象作为参数传递给 page.exposeFunction
- python - 为什么要先将可迭代对象转换为迭代器?
- webpack - 如何从 Webpack Dev Server 热重载中的 URL 中删除端口?
- r - 从数据框中删除单元格小于或大于 R 中值的行
- json - 使用 Google Sheets API 创建持久值的方法有哪些?
- react-native - 当反应本机应用程序在后台/设备被锁定时,如何防止socket.io断开连接?
- c# - 在实体框架中添加相关对象的最佳实践是什么?
- python - 从给定列表的列中查找重复项
- ios - 录制时播放音频会降低音量
- amazon-web-services - EB Beanstalk 上的 Docker 部署失败