Python 3.x 提高迭代速度
下午好 我正在使用以下代码遍历一个巨大的数据帧104062 x 20:Python 3.x 提高迭代速度,python-3.x,pandas,dataframe,iteration,Python 3.x,Pandas,Dataframe,Iteration,下午好 我正在使用以下代码遍历一个巨大的数据帧104062 x 20: import pandas as pd df_tot = pd.read_csv("C:\\Users\\XXXXX\\Desktop\\XXXXXXX\\LOGS\\DF_TOT.txt", header=None) df_tot = df_tot.replace("\[", "", regex=True) df_tot = df_tot.replace("\]", "", regex=True) df_tot = d
import pandas as pd
df_tot = pd.read_csv("C:\\Users\\XXXXX\\Desktop\\XXXXXXX\\LOGS\\DF_TOT.txt", header=None)
df_tot = df_tot.replace("\[", "", regex=True)
df_tot = df_tot.replace("\]", "", regex=True)
df_tot = df_tot.replace("\'", "", regex=True)
i = 0
while i < len(df_tot):
to_compare = df_tot.iloc[i].tolist()
for j in range(len(df_tot)):
if to_compare == df_tot.iloc[j].tolist():
if i == j:
print('Matched itself.')
else:
print('MATCH FOUND - row: {} --- match row: {}'.format(i,j))
i += 1
我希望尽可能优化每次迭代所花费的时间,因为这段代码迭代104062^2次。大约有100亿次迭代
以我的计算能力,在整个DF中与_compare进行比较的时间大约为26秒
我想澄清一下,如果需要,整个代码可以用更快的构造进行更改
像往常一样,提前谢谢。据我所知,您只想找到重复的行 示例数据2最后一行重复:
In [1]: df = pd.DataFrame([[1,2], [3,4], [5,6], [7,8], [1,2], [5,6]], columns=['a', 'b'])
df
Out[1]:
a b
0 1 2
1 3 4
2 5 6
3 7 8
4 1 2
5 5 6
这将返回所有重复的行:
In [2]: df[df.duplicated(keep=False)]
Out[2]:
a b
0 1 2
2 5 6
4 1 2
5 5 6
和索引,按重复行分组:
In [3]: df[df.duplicated(keep=False)].reset_index().groupby(list(df.columns), as_index=False)['index'].apply(list)
Out[3]: a b
1 2 [0, 4]
5 6 [2, 5]
您还可以从数据帧中删除重复项:
In [4]: df.drop_duplicates()
Out[4]:
a b
0 1 2
1 3 4
2 5 6
3 7 8
一般来说,您不需要迭代。还记得包括一个样本数据和数据的预期输出。我不太清楚,如果你能向我解释一下如何以其他方式实现我的目标,我将不胜感激。soggetto是什么?它是to_compare的前一个名称,我只是忘了交换它,不管怎样编辑,谢谢你让我意识到这个错误。这正是我想要的。我唯一的问题是:……groupby['a','b']在方括号内,我是否必须指定我的数据帧大小写的所有列,我将它们全部匹配?@Gianmarco Marandola很快-是的,但我将……groupby['a','b']改为……groupbylistdf.columns以指定所有列,@Dmitry K。所以我想,如果我在启动这行脚本后没有得到结果,那么应该不会有任何重复,对吗?