2017-02-14 13 views
1

Iは、目標は、IDによってグループ化し、グループごとに各タイプのnuniqueを有するデータフレームを取得することであるパンダ基によって、フィルタ、および集約

import pandas as pd 
import numpy as np 
d = {'id':[1,2,3,4,3,3,1,6], 'type':['t2','t1','t2','t2','t3','t3','t4','t3']} 
df = pd.DataFrame(data=d) 

ようなデータフレームを有しています。

私は、これはそれを解決するだろうと思ったが、動作していないよう:

df.groupby('id').agg({'type':pd.Series.nunique()}) 
+1

'nunique'から'() 'を削除します。関数への参照を渡したいので、呼び出さないようにしてください。 'df.groupby(by = 'id')。agg(pd.Series.nunique)'がそのトリックを行います。 – dnswlt

+0

ありがとう@dnswlt - 私はそれは簡単だった新しい。 – SteelyDanish

答えて

2

あなたは単純に最初type SeriesGroupByにアクセスすることにより、このビット以上を行うことができます。

>>> df.groupby('id').type.nunique() 
id 
1 2 
2 1 
3 2 
4 1 
6 1 

コメントで述べたようにaggは、それが呼び出すことができる関数オブジェクト(nunique)、ではないあなたはnunique()を持っているとして、実際の関数呼び出しの試みを期待して、あなたの現在のアプローチは動作しません。

関連する問題