计算大于 pandas groupby 中的值的项目

新手上路,请多包涵

我有 Yelp 数据集,我想计算所有超过 3 星的评论。我通过这样做得到评论的数量:

 reviews.groupby('business_id')['stars'].count()

现在我想获得超过 3 星的评论数,所以我从 这里 获得灵感来尝试这个:

 reviews.groupby('business_id')['stars'].agg({'greater':lambda val: (val > 3).count()})

但这只是像以前一样给了我所有星星的数量。我不确定这是否是正确的方法?我在这里做错了什么。 lambda 表达式不会遍历星号列的每个值吗?

编辑:好吧,我觉得自己很愚蠢。我应该使用 sum 函数而不是 count 来获取大于 3 的元素的值,如下所示:

 reviews.groupby('business_id')['stars'].agg({'greater':lambda val: (val > 3).sum()})

原文由 rookie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您可以尝试这样做:

 reviews[reviews['stars'] > 3].groupby('business_id')['stars'].count()

原文由 Mohamed AL ANI 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于我还想重命名该列并在同一列上运行多个函数,因此我想出了以下解决方案:

 # Counting both over and under
reviews.groupby('business_id')\
       .agg(over=pandas.NamedAgg(column='stars', aggfunc=lambda x: (x > 3).sum()),
            under=pandas.NamedAgg(column='stars', aggfunc=lambda x: (x < 3).sum()))\
       .reset_index()

pandas.NamedAgg 允许您创建多个新列,因为该功能在较新版本的 pandas 中已被删除。

原文由 Esben Eickhardt 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题