Как я могу сгруппировать только последующие / непрерывные элементы, используя группы pandas? - PullRequest
0 голосов
/ 14 мая 2019

Если я выполню групповую операцию в приведенном ниже примере, я получу сумму для всех записей с «A». Я хотел бы суммировать только непрерывные, последующие вхождения «А». Это возможно с группой? Есть ли другой способ сделать это?

Я уже решил это с помощью некоторых пользовательских циклов, которые, однако, слишком медленные.

pandas as pd
foo = pd.DataFrame({'bar':['A','A','B','A','A','A','C'],'foobar': [1,2,3,4,5,6,7]})
foo.groupby('bar').sum()

В данный момент вывод для суммы A равен 18. Я хотел бы иметь сумму для A1 = 3, B = 3, A2 = 15 и т. Д.

1 Ответ

0 голосов
/ 03 июня 2019

Я наконец нашел решение:

foo = pd.DataFrame({'bar':['A','A','B','A','A','A','C'], 'foobar': [1,2,3,4,5,6,7]}) 
foo['group_index'] = (foo['bar'] != foo['bar'].shift()).cumsum() 
foo.groupby(['bar', 'group_index']).sum() 

Надеюсь, это поможет кому-то еще.

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