我有一个包含三列的数据集: 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)
我想计算每个品种的平均评级,其中狗是真的。这将是预期的:
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
条件时,我只得到错误。有人能给出一个解决方案吗?提亚
发布于 2018-06-03 09:19:54
一旦分组并选择了一个列,您的dog
列就不再存在于您选择的上下文中(即使它存在,您也没有正确地访问它)。
首先过滤数据帧,然后在mean
中使用groupby
df[df.dog].groupby('breed')['rating'].mean().reset_index()
breed rating
0 Chihuahua 8.5
1 Dalmatian 10.0
发布于 2018-06-06 06:25:47
另一种解决方案是使dog
成为您的grouper键之一。然后在单独的步骤中按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
https://stackoverflow.com/questions/50662469
复制相似问题