Python:在数据框中高效循环以查找多列重复项

时间:2018-07-27 11:45:32

标签: python pandas loops dataframe duplicates

我正在使用python,我想浏览数据集并突出显示最常用的位置。

这是我的数据集(但有300,000多个记录):

Longitude   Latitude
14.28586    48.3069
14.28577    48.30687
14.28555    48.30678
14.28541    48.30673

首先,我添加一个密度列:

df['Density'] = 0

这是我用来增加每个记录的密度值的代码:

for index in range(0,len(df)):
    for index2 in range(index + 1, len(df)):
        if df['Longitude'].loc[index] == df['Longitude'].loc[index2] and df['Latitude'].loc[index] == df['Latitude'].loc[index2]:
            df['Density'].loc[index] += 1
            df['Density'].loc[index2] += 1
            print("match")
    print(str(index) + "/" + str(len(df)))

上面的代码只是简单地遍历数据帧,将第一条记录与数据集中的所有其他记录进行比较(内部循环),并且当找到匹配项时,它们的两个密度值都会增加。

我想找到匹配的经度和纬度,并增加其密度值。

代码显然很慢,而且我确信Python会有很酷的技术来做类似的事情,有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用duplicatedgroupbytransformsum来实现:

让我们创建一个实际上具有重复项的样本数据集

df = pd.DataFrame({'lat': [0, 0, 0, 1, 1, 2, 2, 2],
                   'lon': [1, 1, 2, 1, 0, 2, 2, 2]})

首先根据latlon标记重复的行,并应用转换以创建新列

df['is_dup'] = df[['lat', 'lon']].duplicated()
df['dups'] = df.groupby(['lat','lon']).is_dup.transform(np.sum)
# df outputs:
df['is_dup'] = df[['lat', 'lon']].duplicated()
df['dups'] = df.groupby(['lat','lon']).is_dup.transform(np.sum)