首页 > 解决方案 > 有效地将整数列转换为 HH:MM:SS 格式的时间

问题描述

我正在尝试开发一种更有效的方法loop来完成一个问题。目前,下面的代码应用 astring如果它与特定值对齐。但是,这些值的顺序相同,因此loop可以使此过程更有效。

df下面为例,用integers来表示时间段,每增加一个整数等于 15 分钟的时间段。等等。目前我会重复这个过程,直到最后一个时间段1 == 8:00:002 == 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

标签: pythonpandasloops

解决方案


一般来说,你想制作一本字典并申请

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

推荐阅读