У меня есть набор данных
BDate,Snum,ArrTime,OID,TDate,TTime,VID
1/1/2018,72,05:59:01,7214,1/1/2018,12:06:20 AM ,7206
1/1/2018,72,06:04:33,7208,1/1/2018,12:36:31 AM,7205
1/1/2018,72,06:21:07,7216,1/1/2018,5:53:49 AM,7220
1/1/2018,80,06:29:01,8026,1/1/2018,5:59:10 AM,7214
1/1/2018,72,06:30:54,7218,1/1/2018,6:04:55 AM,7208
1/1/2018,72,06:33:54,7221,1/1/2018,06:21:17 AM,7216
1/1/2018,80,06:35:26,8018,1/1/2018,06:31:04 AM,7218
1/1/2018,72,09:38:34,7211,1/1/2018,1:40:38 PM,7209
1/1/2018,72,13:39:45,7209,,,
Цель, на которую я смотрю, - сопоставить столбцы в ArrTime с ближайшим временем в TTime, которого я уже достиг в своем другом посте.
Я пытаюсь улучшить анализ, создав временную привязку на основе столбца ArrTime. Как видно из данных, приведенных выше, 1-й тайм ArrTime равен 0:59:01, а последний ArrTime 13:39:45. Я хотел бы использовать эти 2 тайминга (но последний тайминг + 1 мин) как временную границу, чтобы удалить любое время в TTime, которое не попадает в диапазон.
Как показано ниже, мой код
mydataset = pd.read_csv("Test.csv", error_bad_lines=False, engine ='python', index_col= False,header = 0, sep = ",")
mydataset['Date1'] = pd.to_datetime(mydataset['BDate'] + ' ' + mydataset['ArrTime'], format='%d/%m/%Y %H:%M:%S')
datesAM = pd.to_datetime(mydataset['TDate'] + ' ' + mydataset['TTime'], format='%d/%m/%Y %I:%M:%S %p')
datesPM = pd.to_datetime(mydataset['TDate'] + ' ' + mydataset['TTime'], format='%d/%m/%Y %H:%M:%S %p')
mydataset['Date2'] = datesAM.mask(mydataset['TTime'].str.endswith('AM',na=False), datesPM)
#print(mydataset)
df1 = mydataset[['Date1','Snum', 'OID']].sort_values('Date1').dropna(subset=['I'])
df1['OID'] = df1['OID'].astype(np.int64)
a = df1['Date1'].iloc[0]
a1 = a.time().strftime('%H:%M:%S')
print(a1)
b = df1['Date1'].iloc[-1]
b1 = b.time().strftime('%H:%M:%S')
print(b1)
df2 = mydataset[['Date2','VID']].sort_values('Date2').dropna(subset=['VID'])
df2['VID'] = df2['VID'].astype(np.int64)
df2[df2['Date2'].indexer_between_time(a1,b1)]
#df2['Date2'] = pd.date_range(start = a1, end = b1)
#print(df2)
Я пытался использовать iloc, чтобы определить 1-е время и дату последнего времени, а затем преобразовать его в формат времени. Я попытался использовать pd.date_range и indexer_between_time, но все это дало мне ошибку, такую как «Объект« Series »не имеет атрибута« indexer_between_time »» и «Длина значений не соответствует длине индекса»
Моя конечная цель состоит в том, чтобы удалить детали (не всю строку, а только TDate, TTime, VID), которые не попадают в диапазон, затем выполнить сопоставление ближайшего времени (время сопоставления уже достигнуто)
BDate,Snum,ArrTime,OID,TDate,TTime,VID
1/1/2018,72,05:59:01,7214,,,
1/1/2018,72,06:04:33,7208,,,
1/1/2018,72,06:21:07,7216,,,
1/1/2018,80,06:29:01,8026,1/1/2018,5:59:10 AM,7214
1/1/2018,72,06:30:54,7218,1/1/2018,6:04:55 AM,7208
1/1/2018,72,06:33:54,7221,1/1/2018,06:21:17 AM,7216
1/1/2018,80,06:35:26,8018,1/1/2018,06:31:04 AM,7218
1/1/2018,72,09:38:34,7211,1/1/2018,1:40:38 PM,7209
1/1/2018,72,13:39:45,7209,,,