首页 文章

熊猫:按满足条件的列分组

提问于
浏览
3

我有一个包含三个列的数据集:评级,品种和狗 .

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)

我想计算狗是真的每品种 mean 评级 . 这将是预期的:

breed     rating
0 Chihuahua 8.5   
1 Dalmatian 10.0

这是我的尝试:

df.groupby('breed')['rating'].mean().where(dog == True)

这是我得到的错误:

NameError: name 'dog' is not defined

但是当我尝试添加 where 条件时,我只会收到错误 . 有人可以建议解决方案吗? TIA

2 回答

  • 3

    分组并选择一列后,您选择的上下文中不再存在 dog 列(即使它确实没有正确访问它) .

    首先过滤您的数据框,然后使用 groupbymean

    df[df.dog].groupby('breed')['rating'].mean().reset_index()
    
           breed  rating
    0  Chihuahua     8.5
    1  Dalmatian    10.0
    
  • 1

    另一种解决方案是使 dog 之一的石斑鱼键 . 然后在单独的步骤中按 dog 过滤 . 如果您不想丢失非狗的汇总数据,这会更有效 .

    res = df.groupby(['dog', 'breed'])['rating'].mean().reset_index()
    
    print(res)
    
         dog      breed  rating
    0  False     Sphynx     7.0
    1   True  Chihuahua     8.5
    2   True  Dalmatian    10.0
    
    print(res[res['dog']])
    
        dog      breed  rating
    1  True  Chihuahua     8.5
    2  True  Dalmatian    10.0
    

相关问题