start = pd.to_datetime("2017-02-21 22:32:41",infer_datetime_format=True)
end = pd.to_datetime("2017-02-22 01:32:41",infer_datetime_format=True)
rng = pd.date_range(start.floor('h'), end.floor('h'), freq='h')
left = pd.Series(rng, index=rng ).clip_lower(start)
right = pd.Series(rng + 1, index=rng).clip_upper(end)
s = right - left
我得到的结果是
2017-02-21 22:00:00 00:27:19
2017-02-21 23:00:00 01:00:00
2017-02-22 00:00:00 01:00:00
2017-02-22 01:00:00 00:32:41
我想将结果pandas.Series
转换为dataframe,使我的结果如下所示
id |hour|day|minute|
+-----+----+---+------+
|10001| 22|Wed| 27|
|10001| 23|Thu| 60|
|10001| 00|Thu| 60|
|10001| 01|Thu| 32|
任何直接转换选项或我应该循环通过它?你知道吗
选项1
在使用
strftime
之后使用np.core.defchararray.split
在秒数上使用floor division之后使用
assign
选项2
在列表理解中使用词典。
请注意,我使用的是Python3.6 f字符串。
否则使用
'{:02d}'.format(i.hour)
选项3
既然提到了速度这个话题,我想提供另一个考虑到这一点的选项。你知道吗
完成时间测试
注意:我修改了函数以确保输出相同。也就是说,重点是获得正确的列顺序和作为字符串的
Hour
列。你知道吗功能
回测
结果
结论
在图表中,您可以看到在日志空间中绘制时,
jez
、pir1
和pir2
都被分组在一起。这告诉我们他们的时间在以同样的数量级增长。然而,pir3
有一个很大的间隔,并且在较大的数据上变得更大。pir3
的时间复杂度较小,显示出更大的优势。你知道吗当我们看倍数表时,这一点变得更加清楚。每行有一个最低值
1
,表示最快的时间。该行中的所有其他值都是完成同一任务所用时间的倍数。换句话说。值越大,方法越慢。如您所见,这些倍数比更大的数据更大。这意味着pir3
的优势越来越好。你知道吗这就是贝特的样子。夸耀25%的时间改进是毫无意义的。除非你有一个数量级的改进,否则就不值得让读者相信一个算法或方法“更好”。你知道吗
我想你需要^{} 对于一周中的几小时和几天,对于timedelta中的几分钟,使用^{} +^{} :
相关问题 更多 >
编程相关推荐