Предположим, у меня есть два кадра данных: запись и чтение
w:
time address
2018-01-01 00:00:00 8
2018-01-01 01:00:00 2
2018-01-01 02:00:00 5
2018-01-01 03:00:00 3
2018-01-01 04:00:00 4
2018-01-01 04:30:00 5
2018-01-01 06:00:00 5
r:
time address
2018-01-01 00:00:00 3
2018-01-01 01:00:00 1
2018-01-01 03:00:00 6
2018-01-01 04:00:00 3
2018-01-01 05:00:00 5
Время форматируется как pd.to_datetime, формат= '% Y-% m-% d% H:% M:% S'
Для каждого адреса чтения я хочу получить интервал времени (в секундах) между адресом чтения и его последним адресом записи(написать должен прийти, прежде чем читать).Если не найдено, присвойте -1
. Для этого примера я хочу получить [-1, -1, -1, 3600, 1800]
. Для каждого чтения я пытаюсь найти правильный адрес записи.в w наоборот, но это довольно медленно, есть ли эффективный способ сделать это? Или я должен использовать другую структуру данных, а не pandas dataframe, чтобы сделать это?
Мой код указан ниже:
def time_calcu(w, r):
time_deltas = []
for i in range(len(r)):
for j in range(len(w) - 1, -1, -1):
if r.iloc[i, 1] == w.iloc[j, 1] and r.iloc[i, 0] > w.iloc[j, 0]:
t0_t1 = (r.iloc[i, 0] - w.iloc[j, 0]).total_seconds()
time_deltas.append(t0_t1)
break
elif j == 0 :
time_deltas.append(-1)
return time_deltas