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

时间:2018-06-03 01:05:31

标签: python pandas dataframe group-by pandas-groupby

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

library(tidyverse)
new_data <- data %>% filter(IDs < 400)

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

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)

这是我的尝试:

  breed     rating
0 Chihuahua 8.5   
1 Dalmatian 10.0  

这是我得到的错误:

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

但是当我尝试添加NameError: name 'dog' is not defined 条件时,我只会收到错误。有人可以建议解决方案吗? TIA

2 个答案:

答案 0 :(得分:3)

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

首先过滤您的数据框,然后 使用 df[df.dog].groupby('breed')['rating'].mean().reset_index() breed rating 0 Chihuahua 8.5 1 Dalmatian 10.0 {{1}}

{{1}}

答案 1 :(得分: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