2016-10-13 2 views
2

Предположим, что у меня есть Панды DataFrame называется df с колоннами a и b и то, что я хочу, это число различных значений b на каждый a. Я бы сделал:Панды отчетливый отсчет как DataFrame

distcounts = df.groupby('a')['b'].nunique() 

, который дает желаемый результат, но он как объект Серии, а не другой DataFrame. Вместо этого я бы хотел использовать DataFrame. В обычном SQL я бы сделал:

SELECT a, COUNT(DISTINCT(b)) FROM df 

и не смог точно подражать этому запросу в Pandas. Как?

+1

Вы можете назвать 'reset_index()' на результат: 'distcounts = df.groupby ('a') ['b']. nunique(). reset_index()' или просто преобразовать в df: 'distcounts.to_fra я() ' – EdChum

ответ

4

Я думаю, что вам нужно reset_index:

distcounts = df.groupby('a')['b'].nunique().reset_index() 

Пример:

df = pd.DataFrame({'a':[7,8,8], 
        'b':[4,5,6]}) 

print (df) 
    a b 
0 7 4 
1 8 5 
2 8 6 

distcounts = df.groupby('a')['b'].nunique().reset_index() 
print (distcounts) 
    a b 
0 7 1 
1 8 2 
3

Другой вариант использования Groupby.agg вместо:

df.groupby('a', as_index=False).agg({'b': 'nunique'}) 
Смежные вопросы