Dataframe我有不同的机器运行不同的时间,可能会跨越一天,我想在不同的一天区分它
示例机器A运行8小时从开始日期和时间12-8月,晚上9点到13-8月,5am我不能得到正确的时间,3小时从12-8月和5小时从13-8月怀疑,因为我正在使用datetime.now,它如何更改日期将与python中的开始日期/结束日期相同?
下面是我的代码:
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发布于 2021-08-24 09:29:58
这是我的尝试:
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)这可能不是你想要的,因为我也不能很好地理解你的问题。但是您得到的是一个新列,其中每一行都包含一个字典,该字典以日期为键,以当天的小时为值。
如果你让我们知道你到底想要什么,我也许能改进答案。
编辑:如果你的时间段超过两天,这将不起作用。如果这是必要的,时间计算将不得不稍微延长。如果您的列数多于我们执行计算的列数,请将倒数第二行更改为df['hours'] = df[['Start_Time', 'Finish_Time', 'Start_Date', 'End_Date']].apply(get_times, axis=1)
https://stackoverflow.com/questions/68889145
复制相似问题