【发布时间】:2019-04-20 17:25:15
【问题描述】:
想象一下我有这个数据框:
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 列是 id 的链接(一种方式),id #0 具有与 id #6 和 id #7 的链接,id #1 没有链接,id #4 具有与 #9、#2 的链接并且#1 和 id #3 具有 id #0 和 id #1 的链接
如果有链接,如果链接了2个id我想放1,否则放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 循环.. 我想优化以下代码:
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 个 for 循环有 13 000 行,它会很慢..)
我检查了 iterrows() 和 itertuples() 函数,但我不知道该怎么做,isin() 或 apply/map() 函数也是如此。
提前感谢您的帮助。
【问题讨论】:
标签: python pandas list loops optimization