2016-01-26 2 views
0

Пусть у меня есть эта таблица, которую я загружаю в панды DataFrame:Multiple группировка и подсчет в панд

name id ... 
n1 1 
n1 2 
n2 3 
n2 4 
n2 5 
... 

Теперь я хочу, чтобы подсчитать количество идентификаторов для каждого уникального имени.

В SQL, я бы (поправьте меня, если ошибаюсь)

SELECT name, id, COUNT(*) 
FROM table 
GROUP BY name, id; 

Как бы я добиться того же с панды? Это:

df.groupby(['name', 'id'])['name', 'id'].count() 

дает мне отдельные счетчики имен и идентификаторов.

+0

В SQL вы должны' GROUP BY имя, id' на конец вашего запроса. – jarlh

+0

И я не знаю панд, но в дополнение к тому, что сказал jarlh, я думаю, вы не должны группироваться по счету, только имя и идентификатор. – sagi

+0

@jarlh жаль, что я забыл написать это, исправлено. –

ответ

1

Вы хотите groupby на «имя», а затем вызвать count на «ид» это возвращает количество значений:

In [38]: 
df.groupby('name')['id'].count() 

Out[38]: 
name 
n1 2 
n2 3 
Name: id, dtype: int64 

То, что вы эффективно делать группируется как на «имя» и ' идентификатор»поэтому уникальные значения являются комбинацией обеих колонок, вы просите для подсчета идентификаторов для каждого имени, которое не является то же самое

In [41]: 
df.groupby(['name','id'])['name','id'].count() 

Out[41]: 
     name id 
name id   
n1 1  1 1 
    2  1 1 
n2 3  1 1 
    4  1 1 
    5  1 1 
Смежные вопросы