Python 在DB扫描算法中显示名称而不是坐标

Python 在DB扫描算法中显示名称而不是坐标,python,pandas,csv,dataframe,google-colaboratory,Python,Pandas,Csv,Dataframe,Google Colaboratory,Python新手,我从互联网上获得了这段代码(不记得源代码),我无法理解它是如何工作的。我想要的是以某种方式替换输出,以便它显示城市的名称而不是坐标。他们有联系吗?也就是说,一旦我们将这些值输入到DB扫描算法中,它们是否会失去身份?有没有办法保存它以便我可以显示城市名称?感谢您对问题的任何帮助、建议或修改 这是一本书 我查看了你的代码,发现这些簇坐标是根据标签分组的。与此相反,我根据坐标对集群名称进行了分组。希望我能回答你的问题 你的意思是反向搜索坐标以找到它们的标签吗?有更好的方法吗?因为我将

Python新手,我从互联网上获得了这段代码(不记得源代码),我无法理解它是如何工作的。我想要的是以某种方式替换输出,以便它显示城市的名称而不是坐标。他们有联系吗?也就是说,一旦我们将这些值输入到DB扫描算法中,它们是否会失去身份?有没有办法保存它以便我可以显示城市名称?感谢您对问题的任何帮助、建议或修改

这是一本书


我查看了你的代码,发现这些簇坐标是根据标签分组的。与此相反,我根据坐标对集群名称进行了分组。希望我能回答你的问题

你的意思是反向搜索坐标以找到它们的标签吗?有更好的方法吗?因为我将有大约200个城市和它们的坐标,而对于同一个城市,一些坐标可能/可能不相同,反之亦然..嗨,最后的打印声明给了我城市的名称,但是,它们正在被剪切…有没有办法让城市以列表的形式按集群进行分组?另外,你能解释一下你是怎么做到的吗??谢谢@RohitKumar google colab将大值替换为“…”。您始终可以打印单个输出,如
for i in clusters1 print(i)
。实际上,在集群1中,城市是根据标签分组在一起的。要转换为列表,您可以查看此项。
kms_per_radian = 63.710088
epsilon = 1.500 / kms_per_radian
db = DBSCAN(eps=epsilon, min_samples=1, algorithm='ball_tree', metric='haversine').fit(np.radians(coords))
cluster_labels = db.labels_
num_clusters = len(set(cluster_labels))
clusters = pd.Series([coords[cluster_labels == n] for n in range(num_clusters)])
print('Number of clusters: {}'.format(num_clusters))

clustersList = clusters.tolist()

def get_centermost_point(cluster):
    centroid = (MultiPoint(cluster).centroid.x, MultiPoint(cluster).centroid.y)
    centermost_point = min(cluster, key=lambda point: great_circle(point, centroid).m)
    return tuple(centermost_point)

lats, lons = zip(*centermost_points)
rep_points = pd.DataFrame({'lon':lons, 'lat':lats})
rs = rep_points.apply(lambda row: df[(df['lat']==row['lat']) & (df['lon']==row['lon'])].iloc[0], axis=1)



centermost_points = clusters.map(get_centermost_point)
clusters1 = pd.Series([names[cluster_labels == n] for n in range(num_clusters)])
clusters = pd.Series([coords[cluster_labels == n] for n in range(num_clusters)])
print(clusters1)
print(clusters)
print(df)