scala - 计算火花数据帧中 24 小时时间范围内的总和
问题描述
我想通过根据小时过滤行来计算日期和日期+1(24 小时)的总和。
1, 2018-05-01 02:12:00,1
1, 2018-05-01 03:16:10,2
1, 2018-05-01 09:12:00,4
1, 2018-05-01 14:18:00,3
1, 2018-05-01 18:32:00,1
1, 2018-05-01 20:12:00,1
1, 2018-05-02 01:22:00,1
1, 2018-05-02 02:12:00,1
1, 2018-05-02 08:30:00,1
1, 2018-05-02 10:12:00,1
1, 2018-05-02 11:32:00,1
1, 2018-05-02 18:12:00,1
1, 2018-05-03 03:12:00,1
1, 2018-05-03 08:22:00,1
在这里,示例我过滤了从上午 9 点到上午 9 点(下一个日期)的行输出
1, 2018-05-01,12
1, 2018-05-02,5
解决方案
首先定义df
再现性:
import pandas as pd
import io
data=\
"""
1, 2018-05-01 02:12:00,1
1, 2018-05-01 03:16:10,2
1, 2018-05-01 09:12:00,4
1, 2018-05-01 14:18:00,3
1, 2018-05-01 18:32:00,1
1, 2018-05-01 20:12:00,1
1, 2018-05-02 01:22:00,1
1, 2018-05-02 02:12:00,1
1, 2018-05-02 08:30:00,1
1, 2018-05-02 10:12:00,1
1, 2018-05-02 11:32:00,1
1, 2018-05-02 18:12:00,1
1, 2018-05-03 03:12:00,1
1, 2018-05-03 08:22:00,1
"""
df = pd.read_csv(io.StringIO(data), sep = ',', names = ['id','t', 'n'], parse_dates =['t'])
然后使用pd.Grouper
设置为 24h 的频率和base
设置为 9 的参数,这表示周期从上午 9 点开始:
df.groupby(pd.Grouper(key='t', freq='24h', base=9)).n.sum()
结果:
t
2018-04-30 09:00:00 3
2018-05-01 09:00:00 12
2018-05-02 09:00:00 5
Freq: 24H, Name: n, dtype: int64
推荐阅读
- python - 制作数据透视表或交叉表时,有没有办法只显示熊猫列的特定子组?
- github-pages - 限制对存储在私有 GitHub 存储库中的数据的访问
- c# - 我是 C# 编程新手,有一个非常简单的问题
- c - 始终 unlink() 共享内存中的 POSIX 命名信号量
- python - 二分查找,返回值未修改
- lua - Gmod Lua:制作一个附有覆盖层的简单 SWEP
- amazon-web-services - 如何使用 Boto3 从 AWS Glue 获取最后访问的分区
- python - Pandas 多索引数据框 - 从多索引多列中的一个索引中选择最大值
- java - 无法在 Ubuntu 20.10 上运行 VLCJ JavaFX
- r - 使用 dplyr 或 forcats 重新编码 NA 因子