你需要倒过来
row['Current Date']
和
row['Updated Date']
在你的
df['Time Since Last Update']
,然后用
df['Time Since Last Update'] = df.apply(lambda row: BusHrs(row['Updated Date'], row['Current Date']), axis=1)
它应该能工作。我想
start
不能在后面
end
在函数中
businesshrs.difference
。
另外,如果您想加快代码的速度,请执行以下操作:
def BusHrs(start, end):
diff_businesshrs = businesshrs.difference(start,end)
return diff_businesshrs.hours+float(diff_businesshrs.seconds)/float(3600)
编辑我想我找到了一个更快的方法。因为从2016年到现在,每一行的工作时间都很长,所以我想你可以通过计算两个成功更新日期之间的工作时间来更快地进行计算。
sum
直到当前日期的部分计算。您需要两个临时列,一个列的更新日期已移位,另一个列的部分工作时间为
df = df.sort_values('Updated Date').reset_index()
df['Shift Date'] = df['Updated Date'].shift(-1).fillna(pd.datetime.now())
df['BsnHrs Partial'] = df.apply(lambda row: BusHrs(row['Updated Date'], row['Shift Date']), axis=1)
df['Time Since Last Update'] = df.apply(lambda row: df['BsnHrs Partial'][row.name:].sum(), axis=1)
df = df.drop(['Shift Date','BsnHrs Partial'],1).set_index('index') # drop and reindex
df = df.sort_index() #if you want to go back to the original order