簡體   English   中英

計算 str 格式“hh:mm - hh:mm”之間的分鍾數 python

[英]count minutes between str format “hh:mm - hh:mm” python

我有 pandas df,其中 TimeOfWork 列的類型為 str。 那里的所有值看起來像這樣

“hh:mm - hh:mm”

我需要每個人工作分鍾數的新專欄。 例如,如果 TimeOfWork 列中有值“10:00 - 11:30”,則新列中應為 90。 人們可以在午夜工作,因此值可以是“22:00 - 01:00”

您可以將 TimeOfWork 列拆分為單獨的列(startTime 和 endTime),將它們解析為 datetime,計算 timedelta 並考慮超過午夜的時間。 從 timedelta 中,您可以輕松獲得總工作分鍾數。 前任:

import pandas as pd

# example data:
df = pd.DataFrame({'TimeOfWork': ["10:00 - 11:30",  "22:00 - 01:00"]})

# split to separate start and end of work columns
df[['startTime', 'endTime']] = df['TimeOfWork'].str.replace(' ', '').str.split('-', expand=True)

# parse to datetime and calculate timedelta
df['startTime'], df['endTime'] = pd.to_datetime(df['startTime'], format='%H:%M'), pd.to_datetime(df['endTime'], format='%H:%M')
df['deltaTime'] = df['endTime']-df['startTime']

# account for over-night hours (date change)
df.loc[df['deltaTime']<pd.Timedelta(0), 'deltaTime'] +=  pd.Timedelta(days=1)

# extract minutes
df['minutesWorked'] = df['deltaTime'].dt.total_seconds()/60

# df['minutesWorked']
# 0     90.0
# 1    180.0
# Name: minutesWorked, dtype: float64

您可以split和轉換值to_datetime ,取它們之間的差異,除以Timedelta(minutes=1) ,並通過將其除以一天中的分鍾數 (60*24) 來固定跨越午夜的范圍:

# sample data
df = pd.DataFrame({'TimeOfWork': ["10:00 - 11:30", "22:00 - 01:00"]})

# split the range and convert to datetime
z = df['TimeOfWork'].str.split(' - ', expand=True).apply(pd.to_datetime)

# calculate minutes worked
df['MinutesWorked'] = z[1].sub(z[0]).div(pd.Timedelta(minutes=1)) % (60*24)

df

Output:


      TimeOfWork  MinutesWorked
0  10:00 - 11:30           90.0
1  22:00 - 01:00          180.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM