python - 按时间间隔对 Pandas 数据帧数据进行分组
问题描述
我使用 Python 创建了一个 Pandas 数据框,它看起来像这样:
Rate Qty Datetime
130 154.270343 2020-07-05 22:10
131 267.875561 2020-07-05 22:14
132 192.785490 2020-07-05 22:15
130 192.542386 2020-07-05 22:16
150 292.374318 2020-07-05 22:17
123 170.838072 2020-07-05 22:18
144 175.755412 2020-07-05 22:29
200 181.779834 2020-07-05 22:30
201 206.707950 2020-07-05 22:31
178 154.240175 2020-07-05 22:33
191 268.368463 2020-07-05 22:40
191 192.785490 2020-07-05 22:41
201 192.542386 2020-07-05 22:43
201 292.365318 2020-07-05 22:45
300 170.838072 2020-07-05 22:50
我需要更改每条记录的日期,以便新日期需要成为下一个“间隔”。间隔可以是 30 分钟或 1 小时。如果是 30 分钟,2020-07-05 22:10
则变为2020-07-05 22:30
.
所以这是预期的输出:
Rate Qty Datetime
130 154.270343 2020-07-05 22:30
131 267.875561 2020-07-05 22:30
132 192.785490 2020-07-05 22:30
130 192.542386 2020-07-05 22:30
150 292.374318 2020-07-05 22:30
123 170.838072 2020-07-05 22:30
144 175.755412 2020-07-05 22:30
200 181.779834 2020-07-05 22:30
201 206.707950 2020-07-05 23:00
178 154.240175 2020-07-05 23:00
191 268.368463 2020-07-05 23:00
191 192.785490 2020-07-05 23:00
201 192.542386 2020-07-05 23:00
201 292.365318 2020-07-05 23:00
300 170.838072 2020-07-05 23:00
我怎样才能做到这一点?我是否必须遍历数据框,或者是否有一个操作员可以让它更容易做?
解决方案
用于Series.dt.floor
地板时间戳,如果尚未Datetime
列与地板值相同,则添加 30 分钟Series.where
:
df['Datetime'] = pd.to_datetime(df['Datetime'])
d = df['Datetime'].dt.floor('30T')
df['Datetime'] = d.where(df['Datetime'].eq(d), d + pd.Timedelta('30Min'))
print (df)
Rate Qty Datetime
0 130 154.270343 2020-07-05 22:30:00
1 131 267.875561 2020-07-05 22:30:00
2 132 192.785490 2020-07-05 22:30:00
3 130 192.542386 2020-07-05 22:30:00
4 150 292.374318 2020-07-05 22:30:00
5 123 170.838072 2020-07-05 22:30:00
6 144 175.755412 2020-07-05 22:30:00
7 200 181.779834 2020-07-05 22:30:00
8 201 206.707950 2020-07-05 23:00:00
9 178 154.240175 2020-07-05 23:00:00
10 191 268.368463 2020-07-05 23:00:00
11 191 192.785490 2020-07-05 23:00:00
12 201 192.542386 2020-07-05 23:00:00
13 201 292.365318 2020-07-05 23:00:00
14 300 170.838072 2020-07-05 23:00:00
推荐阅读
- ruby-on-rails - Rails 循环遍历参数数据
- java - 使用Zxing库连续扫描二维码,打开相机失败
- nsdate - NSDateFormatter 始于 2000 年,但 NSDate 始于 2001 年
- lambda - AWS CodePipeline:将 Lambda 函数输出传递给 CloudFormation
- python - 构建 Keras 项目
- python - 如何取回 keras 损失函数(张量)的错误值
- algorithm - 用于捆绑制作问题的算法
- powershell - 在循环中尝试 ru 脚本以查看远程服务器上的服务是否正在运行
- string - 通过将字符串 B 的子序列附加到空字符串 C 来创建字符串 A 所需的最少操作数
- php - 使用 Wordpress 使用 PHP 下载 CSV 文件