我有一个包含三个列的数据集: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
答案 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