Сравните значения в GroupBy и посчитайте соответствующие строки - PullRequest
1 голос
/ 01 июня 2019

Это пример строки в моем фрейме данных:

{
"sessionId" : "454ec8b8-7f00-40b2-901c-724c5d9f5a91",
"useCaseId" : "3652b5d7-55b8-4bee-82b6-ab32d5543352",
"timestamp" : "1559403699899",
"endFlow" : "true"
}  

И есть сотни таких строк с одинаковыми / разными значениями 'sessionId', 'useCaseId' и 'endFlow'. Я группирую его по 'sessionId' и 'useCaseId' следующим образом:

groupby_session_usecase = seperate_dates_df.groupby(['sessionId','useCaseId'])  

Внутри групп в 'groupby_session_usecase' я хочу найти, есть ли строка, у которой значение 'endFlow' равно 'true'. Я пробовал следующее:

'true' in groupby_session_usecase['endFlow']  

Однако приведенная выше строка всегда возвращает значение «Ложь», даже если значения «endFlow» равны «истина»

Какой правильный подход, чтобы проверить, есть ли какая-либо строка в группах в 'groupby_session_usecase', имеющая значение 'endFlow', равное 'true'?

1 Ответ

1 голос
/ 01 июня 2019

ОП пишет:

"Я должен взять счетчик 'endFlow = true' на основе 'sessionId' и 'UseCaseId. Есть идеи, как этого добиться? "

Да, все, что вам нужно сделать, это сначала сравнить строки, а затем сгруппировать результаты, используя SeriesGroupBy.sum().

(df['endFlow'] == "true").groupby([df['session'], df['useCaseId']]).sum()

В качестве альтернативы, вы можете присвоить сравнение обратно df, тогда ваша группировка станет немного проще:

(df.assign(msk=df['endFlow'].eq('true'))
   .groupby(['session', 'useCaseId'])['msk']
   .sum())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...