поиск элемента определенного поля в матрице смежности pandas

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть фрейм данных смежности pandas, где мне нужно иметь возможность идентифицировать любой элемент в этом фрейме данных по его физической нумерованной позиции, а не по индексу или позиции столбца, ни по его координате.

фрейм данных представляет собой матрицу смежности размером 10 000 x 10 000:

 adj.shape

(10103, 10103)
  

Вместо того, чтобы делать что-то вроде

 adj.iloc[coord1], [coord2]]
  

(что работает нормально), мне нужно иметь возможность находить значение во фрейме данных по его физическому номеру от 0 до 100 000 000 (0 — самое первое поле, а 100 000 000 — самое последнее.

Я попробовал (как я считаю) неуклюжий способ выполнения, который заключается в том, чтобы сложить фрейм данных, преобразовать в список, а затем найти соответствующее значение по интересующему меня индексу:

 adj().stack().tolist()[0]
  

(или любое другое число, которое сообщает мне, какое значение находится в этой позиции. это также отлично работает, но я хотел бы иметь возможность сохранить матрицу смежности нетронутой. любая помощь будет высоко оценена!

Спасибо!

Ответ №1:

Используйте целочисленное деление и по модулю:

 np.random.seed(1)

adj = pd.DataFrame(np.random.rand(20,20))
# print (adj)

N = 99
a = adj.stack().tolist()[N]
print (a)
0.6171449136207239

b = adj.iloc[N // adj.shape[0], N % adj.shape[1]]
print (b)
0.6171449136207239