在Python中将分钟列转换为小时和分钟

10

我在Pandas中有一个名为“duration”的数据帧,它的单位是分钟。

我想要一个新的列,以小时:分钟(HH:MM)的格式给出持续时间。


请在此处查看完全相同问题的答案:https://dev59.com/_3nZa4cB1Zd3GeqPtbb_ - David Gaertner
@DavidGaertner 是的,那里的被接受的答案非常好。 - Chris
我看到那个了,试着用了一下。我猜我在将它应用到我的列上有些困难。我的数据帧名叫df_m,时间在标题为“duration”的列中(实际中没有引号)。 - Sharkfan1781110
发布你的失败代码。你可以使用现有答案作为方法,然后执行 df['your_column_with_minutes'].apply(method) - bluesmonk
显示剩余2条评论
4个回答

9
我不熟悉Pandas,但将分钟转换为分钟和小时的一般方法如下所示:

total_minutes = 374

# Get hours with floor division
hours = total_minutes // 60

# Get additional minutes with modulus
minutes = total_minutes % 60

# Create time as a string
time_string = "{}:{}".format(hours, minutes)

print(time_string) # Prints '6:14' in this example

您也可以使用 divmod() 避免中间步骤:

time_string = "{}:{}".format(*divmod(total_minutes, 60))

在这里,* 允许 format() 接受由 divmod() 返回的包含两个整数的元组作为两个单独的参数。

8
假设你的DataFrame如下所示:
df = pd.DataFrame({'duration': [20, 10, 80, 120, 30, 190]})

使用 pd.to_datetimestrftime

pd.to_datetime(df.duration, unit='m').dt.strftime('%H:%M')

0    00:20
1    00:10
2    01:20
3    02:00
4    00:30
5    03:10
dtype: object

1
这就是一个熟悉Pandas的人所回答的样子! :) - Chris
1
是的!没错。完美地工作了!! - Sharkfan1781110
1
注意,它是按日舍入的。例如: print(pd.to_datetime(pd.Series(2880), unit='m').dt.strftime('%H:%M')) 返回 00:00 - idansc

6

最好这样使用:

minutes = 204
print("%02d:%02d" % (divmod(minutes, 60)))

这将产生一个格式良好的输出:03:24


2

如果持续时间超过24:00小时,您可以使用:

df.duration = df.duration.apply(lambda x: '{:02d}:{:02d}'.format(*divmod(x, 60)))

例如,给定一个数据框 df:
df = pd.DataFrame({'duration': [20, 10, 80, 120, 30, 190]})

应用该运算符后,我们得到:
  1. 00:20
  2. 00:10
  3. 01:20
  4. 02:00
  5. 00:30
  6. 03:10
  7. 40:40

(注意:保留HTML标签)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接