Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用类似于GIS溶解操作的Pandas在Python中总结分段道路数据?_Python_Python 3.x_Pandas_Gis - Fatal编程技术网

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

如何使用类似于GIS溶解操作的Pandas在Python中总结分段道路数据?,python,python-3.x,pandas,gis,Python,Python 3.x,Pandas,Gis,我对道路数据进行了分段,如下所示: 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] }) >>> pr

我对道路数据进行了分段,如下所示:

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
中有一个工具可以执行此操作,名为。我想用熊猫来完成这项任务。以下是所需的输出:

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
试试这个

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


谢谢你!此解决方案也适用于分类数据。只需使用
input\u df['value']将value列转换为pandas类别类型。astype('category')
。然后使用
input_df.VALUE.cat.codes.diff()0