python - 有效地将整数列转换为 HH:MM:SS 格式的时间
问题描述
我正在尝试开发一种更有效的方法loop
来完成一个问题。目前,下面的代码应用 astring
如果它与特定值对齐。但是,这些值的顺序相同,因此loop
可以使此过程更有效。
以df
下面为例,用integers
来表示时间段,每增加一个整数等于 15 分钟的时间段。等等。目前我会重复这个过程,直到最后一个时间段1 == 8:00:00
。2 == 8:15:00
如果这达到了80
它可能会变得非常低效。可以loop
在这里合并吗?
import pandas as pd
d = ({
'Time' : [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6],
})
df = pd.DataFrame(data = d)
def time_period(row) :
if row['Time'] == 1 :
return '8:00:00'
if row['Time'] == 2 :
return '8:15:00'
if row['Time'] == 3 :
return '8:30:00'
if row['Time'] == 4 :
return '8:45:00'
if row['Time'] == 5 :
return '9:00:00'
if row['Time'] == 6 :
return '9:15:00'
.....
if row['Time'] == 80 :
return '4:00:00'
df['24Hr Time'] = df.apply(lambda row: time_period(row), axis=1)
print(df)
出去:
Time 24Hr Time
0 1 8:00:00
1 1 8:00:00
2 1 8:00:00
3 2 8:15:00
4 2 8:15:00
5 2 8:15:00
6 3 8:30:00
7 3 8:30:00
8 3 8:30:00
9 4 8:45:00
10 4 8:45:00
11 4 8:45:00
12 5 9:00:00
13 5 9:00:00
14 5 9:00:00
15 6 9:15:00
16 6 9:15:00
17 6 9:15:00
解决方案
一般来说,你想制作一本字典并申请
my_dict = {'old_val1': 'new_val1',...}
df['24Hr Time'] = df['Time'].map(my_dict)
但是,在这种情况下,您可以使用时间增量:
df['24Hr Time'] = pd.to_timedelta(df['Time']*15, unit='T') + pd.to_timedelta('7:45:00')
输出(注意新列的类型是timedelta
,而不是字符串)
Time 24Hr Time
0 1 08:00:00
1 1 08:00:00
2 1 08:00:00
3 2 08:15:00
4 2 08:15:00
5 2 08:15:00
6 3 08:30:00
7 3 08:30:00
8 3 08:30:00
9 4 08:45:00
10 4 08:45:00
11 4 08:45:00
12 5 09:00:00
13 5 09:00:00
14 5 09:00:00
15 6 09:15:00
16 6 09:15:00
17 6 09:15:00
推荐阅读
- arrays - VBNet:类内的项目列表,我无法更改单个项目的值
- python - 在 ML 中对文本数据进行分类的最佳方法是什么?
- azure - 为什么我看到错误应用程序名称在 wordpress 网站创建中不可用
- api - Azure devops 连接到 d365 业务中心
- swift - 很快,有没有办法使用通过 OAuth2 库获得的令牌登录网站?
- c# - 从 MIME Multipart 文件中提取 XML 对象
- html - 为多个社交网络(Mac、Window)添加元标记 og:title 和上标®
- r - 如何在R中有效地找到高于阈值的最长值序列
- spring-boot - 在 Spring Boot 中集成 Liquibase Groovy DSL
- amazon-web-services - 让 cloudformation 等到在 s3 中创建对象