2015-10-12 2 views
1

У меня есть DF как этотGroupBy графу Частота уникальных значений в наборе

User  Dept  
    1  Cook 
    1  Cook 
    1  Home 
    2  Sports 
    2  Travel 
    2  Cook 

Я хочу подсчитывать уникальных пользователей в пределах каждого отдела:

Dept  User 
    Cook  2 
    Home  1 
    Sports 1 
    Travel 1 

Обратите внимание, как отдел Кук имеет только счет два, потому что, хотя три пользователя были найдены в «Куке», было только два пользователей

Я пробовал следующее:

df.groupby(['Dept']).count() -- counts 'Cook' three times 
df.drop_duplicates(['Dept']).groupby('Dept')['User'].sum() -- over counts all departments 

Я знаю, что ответ - группа, я просто не могу понять это!

+0

Вы действительно близко! 'df.drop_duplicates(). groupby ('Dept'). count()' Я думаю, может быть, что вы хотите. – dagrha

+0

Привет, Дагрха, этот метод по-прежнему считает «Кук» три раза вместо двух. Мне нужно количество уникальных пользователей в каждом отделе. – user3682157

+0

Как насчет '.size()' вместо '.count()'? Оба метода, похоже, работают на меня (py2.7, pandas 0.16.2) – dagrha

ответ

3

Вы можете использовать nunique:

>>> df.groupby("Dept")["User"].nunique() 
Dept 
Cook  2 
Home  1 
Sports 1 
Travel 1 
Name: User, dtype: int64 
>>> df.groupby("Dept")["User"].nunique().reset_index() 
    Dept User 
0 Cook  2 
1 Home  1 
2 Sports  1 
3 Travel  1 

(. Обратите внимание, что я использовал свои данные примера, который имеет только один уникальный пользователь в Sports)

+0

Ах да, это сработало - забыли об использовании nunique! так много разных способов скинуть кошку в питоне. Большое спасибо! – user3682157

Смежные вопросы