Доброе утро,
Я хотел бы спросить вас, почему я получаю Нэн из этого кода? У меня есть Dataframe, где только 4 столбца: flightID, отметка времени, X и Y.
Для каждого рейса у меня есть несколько рядов с разными отметками времени и позициями x, y. То, что я хочу, это рассчитать время от каждой координаты x, y. Затем я хочу сравнить время, полученное от каждой координаты x, y, и иметь только самые маленькие значения для каждой координаты x, y. Я надеюсь, что код написан хорошо, но в последнем массиве min_time у меня есть куча NaN для x или y, подскажите, пожалуйста, почему?
Я добавил небольшой код для создания фрейма данных, аналогичного тому, который у меня есть, поэтому пример воспроизводим.
data = {'flightID':['11111', '11111', '11111', '11111','2222','2222','2222','3333','3333','3333','3333'], 'timestamp':[1519669804, 1519669844, 1519669884, 1519669924,1519669976,1519679614,1519679615,1519679616,1519679800,1519679876,1519679999],'X':[1,1,1,1,2,3,4,4,4,5,6],'Y':[7,7,7,7,7,7,7,8,8,8,9]}
Grid_frame2 = pd.DataFrame(data)
# finding the cells which has something
flight = []
min_time=[]
for j in range(len(Grid_frame2)-1):
if Grid_frame2.flightID[j] == Grid_frame2.flightID[j+1]: # find all the rows from the same flight
arr = [Grid_frame2.timestamp[j]]
arr.append(Grid_frame2.X[j])
arr.append(Grid_frame2.Y[j])
flight = np.reshape(flight,(-1,3))
flight = np.vstack((flight,arr))
arr = []
else: # if you have the last one, compute time flown
time = flight[-1][0] - flight[0][0]
time = abs(time)
x = flight[0][1]
y = flight[0][2]
if len(min_time) == 0: # if min_time array is empty, insert values
arr = [time]
arr.append(x)
arr.append(y)
min_time.append(arr)
arr = []
flight = []
else: # is it is not empty, check if there is the same cell and if it is not smaller value
for k in range(len(min_time)):
if min_time[k][1] == x and min_time[k][2] == y and min_time[k][0] > int(time):
min_time[k][0] = time
flight= []
elif min_time[k][1] == x and min_time[k][2] == y and min_time[k][0] < int(time):
flight = []
pass
else: # if there is no same cell or the value isn't higher, insert values
arr = [time]
arr.append(x)
arr.append(y)
min_time = np.vstack((min_time,arr))
#min_time = np.reshape(min_time,(-1,3))
arr = []
flight = []
Проблема в том, что если я пытаюсь увидеть, что после этого l oop в массиве min_time это выглядит так:
> array([[691., 1., 7.],
[812., nan, 7.],
[898., 6., nan],
...,
[769., nan, 9.],
[769., nan, 9.],
[769., nan, 9.]])
Кроме того, длина должна быть 150, поскольку у меня есть сетка с координатами x, y (10x15), а длина на самом деле больше чем 1000