我使用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
我该如何实现?我是否必须遍历数据框,还是有一个运算符可以使它更容易实现?
答案 0 :(得分:0)
使用Series.dt.floor
作为下限时间戳,并添加30分钟(如果尚未添加),Datetime
列与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