我有一个关于在Python中分离具有相同值的数据的一般问题。例如,这是一个示例数据集。
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)
所以,基本上,有一种方法可以用Python进行编码,我可以说两者纬度和经度相同,则该点必须为红色。如果纬度和经度不同,点必须是黄色?
以下是一些入门代码,可以帮助您解决问题,但是请在问题中张贴自己的代码。每个人都使用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条狗的坐标使用红点(在同一纬度/经度处,否则为黄色) :
df2 = df.groupby(['Latitude','Longitude']).agg(lambda g: color = ['r' if g.size > 1 else 'y'])
这是一个熊猫分组,后跟一个使用lambda表达式的聚合。
请仔细阅读这些内容,然后亲自尝试df.groupby(['Latitude','Longitude']).agg(...)
。