比较GroupBy中的值并计算匹配的行

时间:2019-06-01 18:07:09

标签: python pandas dataframe group-by pandas-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”的行的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

OP写道:

  

“我必须基于'sessionId'和'endFlow = true'进行计数   “ 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())