首页 > 解决方案 > 如何使用类似于 GIS 溶解操作的 Pandas 在 Python 中总结分段的道路数据?

问题描述

我分割了如下所示的道路数据:

import pandas as pd

input_df = pd.DataFrame({
    'ROUTE': ['US9', 'US9', 'US9', 'US9', 'US9'],
    'BMP':   [0.0, 0.1, 0.2, 0.3, 0.4],
    'EMP':   [0.1, 0.2, 0.3, 0.4, 0.5],
    'VALUE': [19, 19, 232, 232, 19]
})

>>> print(input_df)
BMP  EMP ROUTE  VALUE
0.0  0.1   US9     19
0.1  0.2   US9     19
0.2  0.3   US9    232
0.3  0.4   US9    232
0.4  0.5   US9     19

BMP列表示此属性沿道路的线性参考 GIS 表示的开始英里点。EMP是相关的终点里程。当 VALUE 列相等时,我想合并相邻的段。

有一个ArcGIS名为Dissolve Route Events的工具可以执行此操作。我想用 Pandas 来完成这个任务。这是所需的输出:

output_df = pd.DataFrame({
    'ROUTE': ['US9', 'US9', 'US9'],
    'BMP':   [0.0, 0.2, 0.4],
    'EMP':   [0.2, 0.4, 0.5],
    'VALUE': [19, 232, 19]
})

>>> print(output_df)
BMP  EMP ROUTE  VALUE
0.0  0.2   US9     19
0.2  0.4   US9    232
0.4  0.5   US9     19

标签: pythonpython-3.xpandasgis

解决方案


尝试这个!

input_df['trip'] = (input_df.VALUE.diff() != 0).cumsum()
output_df = input_df.groupby(['ROUTE','trip','VALUE']).agg({'BMP':'first','EMP':'last'})
output_df.reset_index()
#
    ROUTE   trip    VALUE   BMP EMP
0   US9 1   19  0.0 0.2
1   US9 2   232 0.2 0.4
2   US9 3   19  0.4 0.5


推荐阅读