如何在Pandas DataFrame中合并同组的两个GeoJSON LineString?
合并同名称下的GeoJSON LineString坐标
你之前用groupby(['geojson'])的方向不对,应该按lom_name分组(你期望结果里的lob_name是笔误,原数据字段为lom_name),目标是把同一场赛事下的所有LineString坐标合并成一个完整的LineString。下面是具体实现:
1. 导入依赖库
import pandas as pd import json
2. 定义合并函数
这个函数负责处理分组后的DataFrame,解析GeoJSON字符串、合并坐标、重构新的GeoJSON:
def merge_linestrings(group): # 将每个GeoJSON字符串转为Python字典 geojson_dicts = group['geojson'].apply(json.loads).tolist() # 合并所有LineString的坐标列表 merged_coords = [] for gj in geojson_dicts: merged_coords.extend(gj['coordinates']) # 构建合并后的LineString GeoJSON merged_geojson = { "type": "LineString", "coordinates": merged_coords } # 返回合并后的结果和对应的赛事名称 return pd.Series({ 'geojson': json.dumps(merged_geojson), 'lom_name': group['lom_name'].iloc[0] })
3. 执行分组合并
# 你的原始数据 data = {'geojson': {0: '{"type":"LineString","coordinates":[[1,4],[2,5]]}', 1: '{"type":"LineString","coordinates":[[3,6],[4,7]]}'}, 'checkpoint': {0: 6, 1: 0},'lom_name': {0: 'marathon19', 1: 'marathon19'}} df = pd.DataFrame.from_dict(data) # 按lom_name分组并应用合并函数 result_df = df.groupby('lom_name', as_index=False).apply(merge_linestrings) print(result_df)
运行后得到的结果:
lom_name geojson 0 marathon19 {"type": "LineString", "coordinates": [[1, 4], [2, 5], [3, 6], [4, 7]]}
额外说明
- 如果存在多个不同的
lom_name,这个方法会自动为每个分组单独合并坐标,生成对应的行。 - 原数据中的
checkpoint字段如果不需要,可以忽略;如果需要保留,可以在函数里补充处理逻辑。
内容的提问来源于stack exchange,提问作者Puzzlemaster
相关产品推荐
相关产品推荐

