Pandas:按满足条件的列分组

sei*_*dox 5 python group-by dataframe pandas pandas-groupby

我有一个包含三列的数据集: rating 、breed 和 dog。

import pandas as pd
dogs = {'breed': ['Chihuahua', 'Chihuahua', 'Dalmatian', 'Sphynx'],
        'dog': [True, True, True, False],
        'rating': [8.0, 9.0, 10.0, 7.0]}

df = pd.DataFrame(data=dogs)
Run Code Online (Sandbox Code Playgroud)

我想计算每个品种的平均评级,其中狗是真的。这将是预期的:

  breed     rating
0 Chihuahua 8.5   
1 Dalmatian 10.0  
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

df.groupby('breed')['rating'].mean().where(dog == True)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

NameError: name 'dog' is not defined
Run Code Online (Sandbox Code Playgroud)

但是当我尝试添加where条件时,我只会得到错误。任何人都可以建议解决方案吗?TIA

use*_*203 6

一旦您分组并选择一列,您的dog列将不再存在于您选择的上下文中(即使存在,您也没有正确访问它)。

第一过滤您的数据帧,然后groupbymean

df[df.dog].groupby('breed')['rating'].mean().reset_index()

       breed  rating
0  Chihuahua     8.5
1  Dalmatian    10.0
Run Code Online (Sandbox Code Playgroud)