按(lat,long)值对数据进行分组以确定绘图的颜色

Grouping data by (lat,long) values to determine color for plotting

我有一个包含纬度和经度数据的数据集,如下所示。一些经纬度坐标是相同的。 我想制作一个交互式散景点图,其中:

我的数据:

Type Latitude Longitude

Dog  41.9595 82.494997
Dog  41.4388 82.493585
Dog  41.4388 82.493585
Dog  41.3848 82.493739
Dog  41.3838 82.383883
Dog  41.3848 82.493739
Dog  41.3828 82.383838
Dog  41.2747 82.474484
Dog  41.3838 82.393949
Dog  41.3883 82.373848
Dog  41.3828 82.383838

如何在 Python 中执行此操作?到目前为止,这是我的代码,所有的点都是相同的颜色。但是,我希望拥有不止一只狗的房屋颜色不同。

from bokeh.plotting import figure, show, output_notebook
from bokeh.tile_providers import CARTODBPOSITRON
p = figure(x_axis_type="mercator", y_axis_type="mercator")
p.add_tile(CARTODBPOSITRON)

p.circle(x=Pet_Data['Latitude'],
         y=Pet_Data['Longitude'], 
         line_color="#FF0000", 
         fill_color="#FF0000",
         fill_alpha=0.05)

output_notebook()
show(p)

这里有一些入门代码可以帮助您摆脱困境,但请 post 在问题中使用您自己的代码。每个人都使用 pandas 包来读取数据集:

import pandas as pd      

# Usually we do pd.read_csv('your.csv'), but since we don't have your CSV file here's code to make this example reproducible (MCVE)
from io import StringIO

df = """Type Latitude Longitude

Dog  41.9595 82.494997
Dog  41.4388 82.493585
Dog  41.4388 82.493585
Dog  41.3848 82.493739
Dog  41.3838 82.383883
Dog  41.3848 82.493739
Dog  41.3828 82.383838
Dog  41.2747 82.474484
Dog  41.3838 82.393949
Dog  41.3883 82.373848
Dog  41.3828 82.383838"""

df = pd.read_csv(StringIO(df), sep='\s+')

现在您可以按 (lat,long) 聚合数据框并定义一个新列 color 为您想要的任何表达式,即使用红点表示具有 >1 条狗的坐标(同时 Lat/Lon,否则黄色:

df.groupby(['Latitude','Longitude']).agg(lambda g: 'r' if g.size > 1 else 'y')

这是一个 pandas groupby 后跟一个使用 lambda 表达式的聚合。

请仔细阅读这些内容并亲自尝试 df.groupby(['Latitude','Longitude']).agg(...)