我正在使用python,我想浏览一个数据集并突出显示最常用的位置。
这是我的数据集(但有300000多条记录(:
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会有一种很酷的技术来做这样的事情,有什么想法吗?
您可以使用duplicated
、groupby
、transform
&sum
实现这一点:
让我们创建一个实际具有重复的示例数据集
df = pd.DataFrame({'lat': [0, 0, 0, 1, 1, 2, 2, 2],
'lon': [1, 1, 2, 1, 0, 2, 2, 2]})
首先基于CCD_ 5&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)