首页 > 解决方案 > 比较 GroupBy 中的值并计算匹配的行数

问题描述

这是我的数据框中的示例行:

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

并且有 100 行这样的行具有相似/不同的“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' 值等于 'true',上面的行也总是返回 'False'

检查“groupby_session_usecase”中的组中是否有任何行具有“endFlow”值等于“true”的正确方法是什么?

标签: pythonpandasdataframegroup-bypandas-groupby

解决方案


OP写道:

“我必须根据'sessionId'和'useCaseId'计算'endFlow = true'。知道如何实现这个要求吗?”

是的,您所要做的就是先比较行,然后使用SeriesGroupBy.sum().

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

或者,您可以将比较分配回df,然后您的分组会变得稍微简单一些:

(df.assign(msk=df['endFlow'].eq('true'))
   .groupby(['session', 'useCaseId'])['msk']
   .sum())

推荐阅读