You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 02:24:28