Python 从Folium中的结果创建一个新列

Python 从Folium中的结果创建一个新列,python,grouping,coordinates,folium,Python,Grouping,Coordinates,Folium,我一直在使用西雅图的事故数据库,其中包含了大约200000起事故的坐标。我想做的是将这些事故按地理位置分组,例如在各个地区。为此,我使用Folium在地图上可视化了分组,但现在我不知道如何将这些相同的分组提取到数据库中的新列中(或者是否可能) 以下是我对Folium所做的工作和结果: from folium import plugins #Using Seattle's latitude and longitude latitude = 47.608013 longitude = -122.

我一直在使用西雅图的事故数据库,其中包含了大约200000起事故的坐标。我想做的是将这些事故按地理位置分组,例如在各个地区。为此,我使用Folium在地图上可视化了分组,但现在我不知道如何将这些相同的分组提取到数据库中的新列中(或者是否可能)

以下是我对Folium所做的工作和结果:

from folium import plugins
#Using Seattle's latitude and longitude 
latitude = 47.608013 
longitude = -122.335167


seattle_map = folium.Map(location = [latitude, longitude], zoom_start = 12)

incidents = plugins.MarkerCluster().add_to(seattle_map)

for lat, lng, label, in zip(database.Y, database.X, database.SEVERITYCODE):
    folium.Marker(
        location=[lat, lng],
        icon=None,
        popup=folium.Popup(label),
    ).add_to(incidents)

seattle_map

如果您想添加西雅图的地区,您可以使用此Github存储库来存储西雅图的各种地理数据:

例如,如果要在地图上添加zipcode区域,可以使用geojson文件,如下所示:

latitude = 47.608013 
longitude = -122.335167

url = "https://raw.githubusercontent.com/seattleio/seattle-boundaries-data/master/data/zip-codes.geojson"

seattle_map = folium.Map(location = [latitude, longitude], zoom_start = 12)
folium.GeoJson(
    url,
    name='zip_code'
).add_to(seattle_map)

seattle_map
如果要将zipcode区域添加到碰撞数据中,最好使用Folium中的Choropleth贴图。您需要对数据进行一些处理,以了解碰撞属于哪个zipcode区域。我使用shapely库来实现这一点。您可以创建这样的代码:

import json
import requests
import folium
import pandas as pd
from shapely.geometry import shape, Point

# Url of the geojson with zipcode of Seattle
url = "https://raw.githubusercontent.com/seattleio/seattle-boundaries-data/master/data/zip-codes.geojson"
# Import data of the collisions in Seattle
df = pd.read_csv("Collisions.csv")
# Keep only lat and long
df_clean = df.loc[:, ["X", "Y"]]
df_clean = df_clean.dropna()

r = requests.get(url)
for index,row in df_clean.iterrows():
    for feature in r.json()["features"]:
        polygon = shape(feature['geometry'])
        point = Point(row[0], row[1])
        if polygon.contains(point):
            df_clean.loc[index,'ZCTA5CE10'] = feature["properties"]['ZCTA5CE10']
            break
            
df_clean = df_clean.dropna()
result = df_clean.groupby(["ZCTA5CE10"])["X"].count()
result = pd.DataFrame(result)
result.reset_index(level=0, inplace=True)

#Using Seattle's latitude and longitude 
latitude = 47.608013 
longitude = -122.335167

seattle_map = folium.Map(location = [latitude, longitude], zoom_start = 12)
folium.Choropleth(
 geo_data=url,
 name='choropleth',
 data=result,
 columns=["ZCTA5CE10", 'X'],
 key_on='feature.properties.ZCTA5CE10',
 fill_color='YlOrRd',
).add_to(seattle_map)

seattle_map
您可以在性能方面改进我的代码(使用for循环创建数据帧的新列显然不是最佳选择)