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

{
"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”的行的正确方法是什么?

最佳答案

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())

关于python - 比较GroupBy中的值并计算匹配的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56409222/

10-12 20:23