Панды: Группировка по столбцу, который соответствует условию - PullRequest
0 голосов
/ 03 июня 2018

У меня есть набор данных с тремя столбцами: рейтинг, порода и собака.

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 Я получаю только ошибки.Кто-нибудь может посоветовать решение?ТИА

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Альтернативное решение - сделать 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
0 голосов
/ 03 июня 2018

После группировки и выбора столбца ваш столбец dog больше не существует в выбранном вами контексте (и даже если он не был правильно доступен).

Отфильтруйте ваш фрейм данныхсначала , затем используйте groupby с mean

df[df.dog].groupby('breed')['rating'].mean().reset_index()

       breed  rating
0  Chihuahua     8.5
1  Dalmatian    10.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...