temp = pd.DataFrame(index = [x for x in range(0, 10)], columns = list('abcd'))
for row in temp.index:
temp.loc[row] = default_rng().choice(10, size=4, replace=False)
temp.loc[1, 'b'] = np.nan
temp.loc[3, 'd'] = np.nan
df:

Значения имеют ту же природу, что и индексы. Моя цель — создать матрицу смежности, в которой индексы и столбцы будут temp.index, где матрица показывает, какие значения появились в строке каждого индекса.
Что я сделал:
temp2 = pd.DataFrame(index = temp.index, columns = temp.index)
for index in temp.index:
temp2.loc[index, temp.loc[index].dropna().values] = 1
temp2 = temp2.replace(np.nan, 0)
temp2:

Это выполняет свою работу: например, temp2 показывает, что индекс строки 0 соседствует с индексами 4,5,7 и 8. Другими словами, индексы, существовавшие в строке 0 в temp, имеют значение 1 и другие имеют значение 0 в temp2.
Проблема: В реальном temp 132 тыс. индексов, и при создании temp2 возникает ошибка памяти. Каков наиболее эффективный способ добраться до temp2. Кстати, индексы имеют диапазон (132000). Кроме того, позже я собираюсь преобразовать эту матрицу в тензор Факела с размерами (2, количество ребер), который показывает ту же информацию о смежности:
adj = torch.tensor(temp2.values)
edge_index = adj.nonzero().t().contiguous()
Подробнее здесь: https://stackoverflow.com/questions/797 ... fficiently
Мобильная версия