[英]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.