Как суммировать сегментированные данные о дорогах в Python, используя Pandas, аналогичные операции растворения ГИС? - PullRequest
1 голос
/ 06 апреля 2019

У меня есть сегментированные данные о проезжей части, которые выглядят так:

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 представляет начальную милю этого атрибута вдоль ГИС-представления дороги с линейной ссылкой. 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

1 Ответ

1 голос
/ 06 апреля 2019

Попробуйте!

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...