#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