如何有效地安排时间python
How to efficiently order time python
抱歉标题模糊。这个问题比较容易显示。
我有一个按时间排序的数据框。我想将其转换为总秒数。问题是时间从 08:00:00 AM 到 03:00:00 AM。所以在时间从 23:59:59 到 00:00:00 之前,总秒数是合适的。
一些时间戳的示例是:
['23:45:00'
'23:45:00'
'23:47:00'
'23:49:00'
'23:55:00'
'00:10:00'
'00:10:00'
'00:10:00'
'01:05:00'
'01:08:00'
'01:10:00'
'01:15:00'
'02:05:00'
'02:07:00'
'03:05:00'
'03:10:00'
'03:15:00'
'03:25:00']
所以总秒数到午夜都可以。然后它又开始了。目前,我正在通过在午夜后添加 24 小时来对此进行修改。
df['Time'] = pd.DatetimeIndex(df['Time']) + timedelta(hours=24)
如果您必须索引适当的行然后添加 n 小时数,那么所有这些都不是很有效。
我不确定这是否有用,但我在下面附上了一些生成随机时间戳的代码:
import pandas as pd
import random
from datetime import timedelta
def randomTime():
rtime = int(random.random()*86400)
hours = int(rtime/3600)
minutes = int((rtime - hours*3600)/60)
seconds = rtime - hours*3600 - minutes*60
time_string = '%02d:%02d:%02d' % (hours, minutes, seconds)
return time_string
time = [randomTime() for _ in range(8)]
k = 5
N = 8
d = ({'Time' : (time)})
df = pd.DataFrame(data=d)
我完全同意@abarnet 的评论,即您应该在每次下降时增加 24 小时,而不是 25 小时。
使用上面的示例,找到增量的有效方法可能是
>>> (pd.to_datetime(df.Time) < pd.to_datetime(df.Time).shift(1)).cumsum() * pd.Timedelta(hours=24)
0 0 days
1 0 days
2 0 days
3 0 days
4 0 days
5 1 days
6 1 days
7 1 days
8 1 days
9 1 days
10 1 days
11 1 days
12 1 days
13 1 days
14 1 days
15 1 days
16 1 days
17 1 days
Name: Time, dtype: timedelta64[ns]
这个
- 检查时间是否相对于前一行下降
- 找到发生这种情况的累计次数
- 将其转换为 24 小时的 timedelta 次数
抱歉标题模糊。这个问题比较容易显示。
我有一个按时间排序的数据框。我想将其转换为总秒数。问题是时间从 08:00:00 AM 到 03:00:00 AM。所以在时间从 23:59:59 到 00:00:00 之前,总秒数是合适的。
一些时间戳的示例是:
['23:45:00'
'23:45:00'
'23:47:00'
'23:49:00'
'23:55:00'
'00:10:00'
'00:10:00'
'00:10:00'
'01:05:00'
'01:08:00'
'01:10:00'
'01:15:00'
'02:05:00'
'02:07:00'
'03:05:00'
'03:10:00'
'03:15:00'
'03:25:00']
所以总秒数到午夜都可以。然后它又开始了。目前,我正在通过在午夜后添加 24 小时来对此进行修改。
df['Time'] = pd.DatetimeIndex(df['Time']) + timedelta(hours=24)
如果您必须索引适当的行然后添加 n 小时数,那么所有这些都不是很有效。
我不确定这是否有用,但我在下面附上了一些生成随机时间戳的代码:
import pandas as pd
import random
from datetime import timedelta
def randomTime():
rtime = int(random.random()*86400)
hours = int(rtime/3600)
minutes = int((rtime - hours*3600)/60)
seconds = rtime - hours*3600 - minutes*60
time_string = '%02d:%02d:%02d' % (hours, minutes, seconds)
return time_string
time = [randomTime() for _ in range(8)]
k = 5
N = 8
d = ({'Time' : (time)})
df = pd.DataFrame(data=d)
我完全同意@abarnet 的评论,即您应该在每次下降时增加 24 小时,而不是 25 小时。
使用上面的示例,找到增量的有效方法可能是
>>> (pd.to_datetime(df.Time) < pd.to_datetime(df.Time).shift(1)).cumsum() * pd.Timedelta(hours=24)
0 0 days
1 0 days
2 0 days
3 0 days
4 0 days
5 1 days
6 1 days
7 1 days
8 1 days
9 1 days
10 1 days
11 1 days
12 1 days
13 1 days
14 1 days
15 1 days
16 1 days
17 1 days
Name: Time, dtype: timedelta64[ns]
这个
- 检查时间是否相对于前一行下降
- 找到发生这种情况的累计次数
- 将其转换为 24 小时的 timedelta 次数