Python 3.x 提高迭代速度

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

下午好

我正在使用以下代码遍历一个巨大的数据帧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 = 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。所以我想,如果我在启动这行脚本后没有得到结果,那么应该不会有任何重复,对吗?