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)
由于我还想重命名该列并在同一列上运行多个函数,因此我提出了以下解决方案:
# 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 中删除。
归档时间: |
|
查看次数: |
14045 次 |
最近记录: |