python - 使用 python 从 pandas 的时间列表中创建平均值
问题描述
我有大量数据。
我需要平均每十五分钟'w'。
现在我用for循环来执行,但是太慢了。
pandas 有什么套件可以帮忙吗?
我真的需要你的帮助。非常感谢。
解决方案
有 2 种可能的不同解决方案 -15Min
按平均值和第一个值重新采样和聚合列:
df = df.resample('15T', on='reporttime').agg({'w':'mean', 'buildingid':'first'})
或按列分组buildingid
以Grouper
进行重采样:
df = df.groupby(['buildingid', pd.Grouper(key='reporttime',freq='15T')])['w'].mean()
样品:
rng = pd.date_range('2017-04-03 18:09:04', periods=10, freq='7T')
df = pd.DataFrame({'reporttime': rng, 'w': range(10), 'buildingid':[39] * 5 + [40] * 5})
print (df)
reporttime w buildingid
0 2017-04-03 18:09:04 0 39
1 2017-04-03 18:16:04 1 39
2 2017-04-03 18:23:04 2 39
3 2017-04-03 18:30:04 3 39
4 2017-04-03 18:37:04 4 39
5 2017-04-03 18:44:04 5 40
6 2017-04-03 18:51:04 6 40
7 2017-04-03 18:58:04 7 40
8 2017-04-03 19:05:04 8 40
9 2017-04-03 19:12:04 9 40
df1 = df.resample('15T', on='reporttime').agg({'w':'mean', 'buildingid':'first'}).reset_index()
print (df1)
reporttime w buildingid
0 2017-04-03 18:00:00 0.0 39
1 2017-04-03 18:15:00 1.5 39
2 2017-04-03 18:30:00 4.0 39
3 2017-04-03 18:45:00 6.5 40
4 2017-04-03 19:00:00 8.5 40
df2 = df.groupby(['buildingid', pd.Grouper(key='reporttime',freq='15T')])['w'].mean().reset_index()
print (df2)
buildingid reporttime w
0 39 2017-04-03 18:00:00 0.0
1 39 2017-04-03 18:15:00 1.5
2 39 2017-04-03 18:30:00 3.5
3 40 2017-04-03 18:30:00 5.0
4 40 2017-04-03 18:45:00 6.5
5 40 2017-04-03 19:00:00 8.5
推荐阅读
- r - 在线图 r 中绘制分组变量
- excel - 使用 VBA 将单词与数字分开
- java - 如何从左到上更改 Android TV 应用中标题的位置?
- android - 如何使用向量打印文件中的单词列表,每次用户查询 [C++] 一次?
- powershell - ms access.exe挂起powershell时发送电子邮件
- sql - SQL 嵌套 IIF 函数
- cassandra - cassandra-reaper:维修一再推迟和卡住
- android - AdMob 永远不会在某些设备上加载
- google-maps - 谷歌静态地图不显示超过 5 个图钉
- sql - SQL从两个表中选择数据并按点排序