Python:在dataframe中高效地循环以查找多个列的重复项

Python:在dataframe中高效地循环以查找多个列的重复项,python,pandas,loops,dataframe,duplicates,Python,Pandas,Loops,Dataframe,Duplicates,我正在使用python,我想浏览一个数据集并突出显示最常用的位置 这是我的数据集(但有300000多条记录): 首先,我添加一个密度列: 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[index

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

这是我的数据集(但有300000多条记录):

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

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会有一种很酷的技术来做类似的事情,有什么想法吗?

您可以使用
复制的
分组方式
转换
&
求和
来实现这一点:

让我们创建一个实际具有重复项的示例数据集

df = pd.DataFrame({'lat': [0, 0, 0, 1, 1, 2, 2, 2],
                   'lon': [1, 1, 2, 1, 0, 2, 2, 2]})
首先根据
lat
lon
标记重复行,并应用转换创建新列

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)

你能解释一下你的代码在做什么吗?我已经更新了我的问题,试图让它更清晰。如果(lat,lon)对出现两次,两行的
Duplicated
列都应该是
1
。我们可以概括一下,如果一对在数据集中出现
N
次,它们的
Duplicated
列应该等于
N-1
,这也会起作用,您对如何高效地编码有什么建议吗?这不会寻找成对的重复项,是吗?只需在一个单列上复制即可。谢谢。我不知道一些python技术。
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)