def timechecker(pickuptime, firstdeliverytime, SLA): secondsinaday = 60 * 60 * 24 pickuptime_obj, firstdeliverytime_obj = time.localtime(pickuptime), time.localtime(firstdeliverytime) pickuptime_seconds, firstdeliverytime_seconds, SLA_seconds = time.mktime(pickuptime_obj), time.mktime(firstdeliverytime_obj), SLA * secondsinaday publicholiday_mon_day = [ [3,25],[3,30],[3,31] ] totalnonworkingdays = 0 day_in_seconds = pickuptime_seconds day = pickuptime_obj while day_in_seconds < firstdeliverytime_seconds: day = time.localtime(day_in_seconds) if ([day.tm_mon,day.tm_mday] in publicholiday_mon_day) or (day.tm_wday == 6): totalnonworkingdays += 1 day_in_seconds += secondsinaday timetakeninworkingdays_seconds = firstdeliverytime_seconds - ( totalnonworkingdays * secondsinaday ) - pickuptime_seconds if (timetakeninworkingdays_seconds) > SLA_seconds: return False return True def is_late(pick,first,second,max_time): if type(second) != int: if timechecker(pick,first,max_time): return 1 else: return 0 elif type(second) == int: if timechecker(pick,first,max_time) and timechecker(first,second,3): return 1 else: return 0 df = pd.read_csv(r'C:\Users\Bob\Downloads\result2.csv') df.columns=['orderid','pick','fiirst','second','buyeraddress','selleraddress','max_time'] df['is_late'] = df.apply(lambda x: is_late(x.pick, x.fiirst, x.second, x.max_time), axis=1) df = df.drop(['pick', 'fiirst','second','buyeraddress','selleraddress','max_time'], axis=1) df.to_csv(r'C:\Users\Bob\Downloads\filename.csv', index = False)