首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas:按满足条件的列分组

Pandas:按满足条件的列分组
EN

Stack Overflow用户
提问于 2018-06-03 09:05:31
回答 2查看 10.7K关注 0票数 5

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
  breed     rating
0 Chihuahua 8.5   
1 Dalmatian 10.0  

这是我的尝试:

代码语言:javascript
复制
df.groupby('breed')['rating'].mean().where(dog == True)

这是我得到的错误:

代码语言:javascript
复制
NameError: name 'dog' is not defined

但是,当我尝试添加where条件时,我只得到错误。有人能给出一个解决方案吗?提亚

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-03 09:19:54

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

首先过滤数据帧,然后在mean中使用groupby

代码语言:javascript
复制
df[df.dog].groupby('breed')['rating'].mean().reset_index()

       breed  rating
0  Chihuahua     8.5
1  Dalmatian    10.0
票数 6
EN

Stack Overflow用户

发布于 2018-06-06 06:25:47

另一种解决方案是使dog成为您的grouper键之一。然后在单独的步骤中按dog进行过滤。如果您不想丢失非狗的聚合数据,这会更有效。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50662469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档