Rynx Yee
Rynx Yee

Reputation: 3

find the time different between the day

Dataframe I have different machine running different hours that might cross over a day and I want to differentiate it on different day

Example Machine A running 8 hours from Start Date and Time 12-Aug, 9pm to 13-Aug , 5am I cant get the correct time that 3hours from 12-Aug and 5hours from 13-Aug Suspect that because i'm using datetime.now how do it change the date will be same as Start date/ End date in python?

Here is my code:

endoftoday = datetime.now()
endoftoday = endoftoday.replace(hour=23,minute=59,second=59)

dt['Start_Date']=dt['Start_Time'].dt.strftime('%d/%m/%Y')
dt['End_Date']=dt['Finish_Time'].dt.strftime('%d/%m/%Y')

if (dt.['Start_Date'].str == dt['End_Date'].str):
    dt['Tested_Time_Today']= endoftoday-dt['Start_Time']
    dt['Tested_Time_NextDay']= dt['Finish_Time'] - endoftoday

Upvotes: 0

Views: 70

Answers (1)

C Hecht
C Hecht

Reputation: 1016

Here is my attempt:

import pandas as pd
import datetime


def get_times(args):
    start_time, end_time, start_date, end_date = args
    hours = {}
    for day in pd.date_range(start_date, end_date, freq='d'):
        hours[day] = max(day, end_time) - max(start_time, day) + datetime.timedelta(hours=24)
    return hours


df = pd.DataFrame({'Start_Time': [datetime.datetime(2021,8,21,6,2), datetime.datetime(2021,8,21,7,19)], 'Finish_Time': [datetime.datetime(2021,8,22,5,12), datetime.datetime(2021,8,21,16,50)], 'Start_Date': [datetime.date(2021,8,21), datetime.date(2021,8,21)], 'End_Date': [datetime.date(2021,8,22), datetime.date(2021,8,21)]})
df['hours'] = df.apply(get_times, axis=1)
print(df)

This is probably not exactly what you are looking for since I also don't really understand your question well enough. But what you get is a new column which contains in each row a dictionary with the dates as key and the hours during that day as value.

If you let us know what exactly you are after, I might be able to improve the answer.

Edit: This won't work if your time period covers more than two days. If that is necessary, the time calculation would have to slightly extended. And if you have more columns than the ones that we perform the calculation on, please change the penultimate row to df['hours'] = df[['Start_Time', 'Finish_Time', 'Start_Date', 'End_Date']].apply(get_times, axis=1)

Upvotes: 1

Related Questions