Pandas: подсчет последовательных строк с условием - PullRequest
1 голос
/ 04 февраля 2020

У меня есть такая таблица:

name = ['a','a','a','a','a','b','b','b','b']
fillrate = [0.1, 0.1, 0.2, 0.1, 0.1, 0.3, 0.3, 0.3, 0.4]
df = pd.DataFrame(name)
df.columns = ['name']
df['fillrate'] = fillrate

Я хочу создать столбец, подобный следующему:

df['count'] = [1,2,1,2,3,1,2,3,1]

Объяснение: столбец 'count' сбрасывается в 1 при наличии новое имя, ИЛИ при увеличении скорости заполнения; в противном случае столбец 'count' равен последнему значению плюс 1.

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

1 Ответ

5 голосов
/ 04 февраля 2020

IIU C давайте объединим shift с diff и с помощью cumsum создадим подгруппу, cumcount

s=(df.name.ne(df.name.shift()) | df.fillrate.diff().gt(0)).cumsum()
s.groupby(s).cumcount()+1
Out[17]: 
0    1
1    2
2    1
3    2
4    3
5    1
6    2
7    3
8    1
dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...