рассчитать максимальную длину пробега групп последовательных значений в пандах - PullRequest
0 голосов
/ 20 октября 2018

Учитывая такой набор данных:

values = ([ 'motorway' ] * 5) + ([ 'link' ] * 3) + ([ 'motorway' ] * 7)

df = pd.DataFrame.from_dict({
  'timestamp': pd.date_range(start='2018-1-1', end='2018-1-2', freq='s').tolist()[:len(values)],
  'road_type': values,
})
df.set_index('timestamp')
df['delta_t'] = (df['timestamp'] - df['timestamp'].shift()).fillna(0)

Я хочу, чтобы максимальные суммы delta_t на группу последовательных типов road_type;учитывая, что delta_t будет 1s в этом примере, я хочу найти motorway: 7s и link: 3s.На практике будет больше road_types, и delta_t будет различаться.

edit: предоставленное решение здесь выглядит аналогично, но не суммирует время и не выбирает наибольшую из каждой группы..

1 Ответ

0 голосов
/ 20 октября 2018

Создайте новый столбец, который будет помечать каждое «движение» идентичных типов дорог уникальным целым числом, затем группировать по этому столбцу и суммой:

df['run'] = (df['road_type'] != df['road_type'].shift()).astype(int).cumsum()

df
             timestamp road_type  delta_t  run
0  2018-01-01 00:00:00  motorway 00:00:00    1
1  2018-01-01 00:00:01  motorway 00:00:01    1
2  2018-01-01 00:00:02  motorway 00:00:01    1
3  2018-01-01 00:00:03  motorway 00:00:01    1
4  2018-01-01 00:00:04  motorway 00:00:01    1
5  2018-01-01 00:00:05      link 00:00:01    2
6  2018-01-01 00:00:06      link 00:00:01    2
7  2018-01-01 00:00:07      link 00:00:01    2
8  2018-01-01 00:00:08  motorway 00:00:01    3
9  2018-01-01 00:00:09  motorway 00:00:01    3
10 2018-01-01 00:00:10  motorway 00:00:01    3
11 2018-01-01 00:00:11  motorway 00:00:01    3
12 2018-01-01 00:00:12  motorway 00:00:01    3
13 2018-01-01 00:00:13  motorway 00:00:01    3
14 2018-01-01 00:00:14  motorway 00:00:01    3


df.groupby('run').agg({'road_type': 'first', 'delta_t': 'sum'}).reset_index(drop=True).groupby('road_type').max()

           delta_t
road_type         
link      00:00:03
motorway  00:00:07
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...