【发布时间】:2022-01-02 22:28:45
【问题描述】:
对于重型机械,人们通常需要知道一台机器运行了多少小时。我有一个包含开始时间和结束时间的数据框。每次使用机器时,我都会计算机器使用的分钟数。这会产生一列df['minutes']。
如何将分钟转换为小时? 3,346 分钟,我应该得到 55 小时 46 分钟,或者55:46。
将此作为工作示例:
df = pd.DataFrame(columns = ['minutes'], data =[3346])
-
如果我使用它,我会得到
07:46:df['duration'] = pd.to_datetime(df['minutes'], unit='m').dt.strftime('%H:%M') -
如果我使用它,我会得到
03 07:46 07:46:df['duration'] = pd.to_datetime(df['minutes'], unit='m').dt.strftime('%d %H:%M')为什么是三个 (03)?
-
我还尝试对分钟列使用 apply 和 gmtime,返回
03 07:46:def dur_time1(x): x*=60 x = time.gmtime(x) x = time.strftime("%d %H:%M", x) return x df['duration'] = df['minutes'].apply(dur_time1) -
最后,我尝试使用 apply 和 timedelta 到分钟列,返回
2 days 07:46:00:def dur_time2(x): x*=60 x = timedelta(seconds = x) return x df['duration'] = df['minutes'].apply(dur_time2)我可以忍受 2 天,我可以将其拆分并乘以 24。但这似乎很复杂。
但这些解决方案都没有显示 55 小时 46 分钟。
【问题讨论】:
-
不是你的问题,只是你的函数写得不好。不要一直覆盖参数,给参数和变量起有意义的名字。第二个可能是
def calculate_duration(minutes): return timedelta(seconds=minutes * 60),然后很清楚发生了什么以及为什么。但是,从分钟计算总小时数是微不足道的,您不需要导入任何模块 - 它是minutes // 60小时和minutes % 60分钟。