【发布时间】:2015-07-25 00:27:57
【问题描述】:
我有一个包含 169361 行的大型数据框,我想成对比较所有行的行。 我的数据框:
new_org old_org asn cc
85736 pcizzi 85736 - Pcizzi S .a 23201 PY
001 001 Host 40244 US
001 001 IT Complex 55734 IN
001 hospedagem 001 Hospedagem Ltda 36351 US
001web action.us.001web.net 36351 US
在我的代码中,我正在成对比较“new_org”和“asn”列的内容,如果它们相同,我会放置一个“匹配”标签
my code:.
matching_dic = []
tuples = [tuple(x) for x in df_compare.values]
# tuples
for i in range(len(tuples)):
for j in range(i+1, len(tuples)):
if tuples[i][1]!=tuples[j][1]:
compare = str(tuples[i][0]) + '|' + str(tuples[j][0])
originals_asn = str(tuples[i][2]) + '|' + str(tuples[j][2])
originals_cc = str(tuples[i][3]) + '|' + str(tuples[j][3])
if tuples[i][0]==tuples[j][0]:
if tuples[i][2]==tuples[j][2]:
first_tag = 'match'
matching_dic.append({'originals_asn':originals_asn,'originals_cc':originals_cc, 'compare': compare, 'first_tag': first_tag})
dftest = DataFrame(matching_dic)
这里是Expected result:
compare first_tag originals_asn originals_cc
001 hospedagem|001web match 3595|3595 US|US
它现在可以完美地用于 1000 行作为测试,但整个数据集需要很长时间。有人知道更有效的方法吗?
【问题讨论】:
-
作为一个想法,我将数据集按
asn分组,然后为所有超过一行的组创建输出 -
当然需要很长时间;有 143 亿种可能的成对组合。
-
我尝试了与@RomanPekar 不同的方法,但这似乎是一个不错的建议。
标签: python for-loop optimization pandas