Представьте, что у меня есть этот фрейм данных:
test = pd.DataFrame({"id" : [0,1,4,3],
"cit" : [[6,7], [], [9,2,1], [0,1]]})
Этот фрейм данных:
id cit
0 0 [6, 7]
1 1 []
2 4 [9, 2, 1]
3 3 [0, 1]
(на самом деле у меня есть фрейм данных с ~ 13 000 строк)
Столбцы cit - это ссылки для идентификатора (в одну сторону), идентификатор № 0 имеет ссылки с идентификатором № 6 и № 7, идентификатор № 1 не имеет ссылки, идентификатор № 4 имеет ссылки с № 9, # 2 и # 1 и id # 3 имеют ссылки с id # 0 и id # 1
, если есть ссылка, я хочу поставить 1, если 2 id связаны, иначе 0
Я хочу получить такой вывод:
id 0 1 4 3
0 X 0 0 1
1 0 X 1 1
4 1 1 X 0
3 1 0 0 X
Я написал код, но с 2 для циклов .. Я хочу оптимизировать следующий код:
for i in range(len(test.id)):
tmp = []
for j in range(len(test.cit)):
if test.id.iloc[i] in test.cit.iloc[j]:
tmp.append(str(1))
else:
tmp.append(str(0))
t2.loc[str(test.id.iloc[i])] = tmp
print(i, '/' , len(test.id))
t2.values[[np.arange(len(test.id))]*2] = "X"
И я нене знаю, как скопировать верхний треугольник в нижний треугольник для DataFrame (я могу сделать это для цикла for, но для циклов 4 с 13 000 строками, это будет очень медленно ..)
Я проверил iterrows () и функции itertuples (), но я понятия не имею, как я могу это сделать, то же самое для функций isin () или apply / map ().
Заранее благодарен за помощь.