计算项目大于pandas groupby中的值

roo*_*kie 12 python python-3.x pandas

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

reviews.groupby('business_id')['stars'].count()
Run Code Online (Sandbox Code Playgroud)

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

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

但这只是给了我以前所有明星的数量.我不确定这是否是正确的方法?我在这里做错了什么.lambda表达式是不是通过星列的每个值?

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

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

Moh*_*ANI 10

你可以尝试做:

reviews[reviews['stars'] > 3].groupby('business_id')['stars'].count()
Run Code Online (Sandbox Code Playgroud)

  • http://www.webpages.uidaho.edu/~stevel/504/Pandas%20DataFrame%20Notes.pdf这是一个非常好的备忘单,你可以在处理大熊猫时使用 (3认同)
  • 但是,这将无法告诉您哪些 business_id 的计数为零 (2认同)

Esb*_*rdt 5

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

# 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()
Run Code Online (Sandbox Code Playgroud)

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