pandas - счетчик на основе нескольких столбцов - PullRequest
0 голосов
/ 26 июня 2018

Я хотел бы создать счетчик значений в столбце «Кнопка» (Пуск, Стоп) в каждом «ИД».Однако любое изменение значения «Button» или «ID» должно сбрасывать счетчик хода.Ниже представлен фрейм данных:

data = pd.DataFrame({
'ID': ['A','A','B','B','C','C','C','C','C','D','E','E'], 
'Button': ['Start','Stop','Start','Stop','Start','Start','Stop','Start','Stop','Start','Start','Stop']
})

Я могу создать счетчик на основе значений «кнопки», но не могу понять, как сгруппировать его по «ID».

data['runningCount'] = data.groupby(data['Button']).cumcount()+1

Я ищу следующий результат:

result = pd.DataFrame({
'ID': ['A','A','B','B','C','C','C','C','C','D','E','E'], 
'Button': ['Start','Stop','Start','Stop','Start','Start','Stop','Start','Stop','Start','Start','Stop'],
'Count': [1,1,1,1,1,2,1,1,1,1,1,1]})

1 Ответ

0 голосов
/ 26 июня 2018

Вам просто нужно создать определенный ключ с shift

s=data.groupby('ID').Button.apply(lambda x : (x!=x.shift()).cumsum())
data.groupby([data.ID,s]).cumcount()+1
Out[189]: 
0     1
1     1
2     1
3     1
4     1
5     2
6     1
7     1
8     1
9     1
10    1
11    1
dtype: int64

Подробнее

data.groupby('ID').Button.apply(lambda x : (x!=x.shift()).cumsum())
Out[192]: 
0     1
1     2
2     1
3     2
4     1
5     1
6     2
7     3
8     4
9     1
10    1
11    2
Name: Button, dtype: int32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...