python - 如何使用类似于 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
解决方案
尝试这个!
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
推荐阅读
- python - 在 Python 中使用记录器模块 - 无法同时记录控制台和文件
- android - 如何更改 Dialog 窗口大小 Android studio
- java - java中的Ludo板
- gnuplot - 如何为 gnuplot 箱形图使用调色板索引?
- java - 如何从java中的用户输入中获取时间格式?
- c# - 从 Entity Framework Core 获取错误列表包含另一个列表
- hadoop - oozie shell 脚本在 kerberos 集群中执行直线
- r - 无法在 r 中使用 ggplot2 分离 geom_point 和 _line 绘图的颜色和线型图例
- spring - 春季重试 - @Recover 可以在独立类中吗?
- c++ - 从对象本身的容器中移除对象