2016-12-02 8 views
0

私はPandasデータフレームで作業しており、データフレームの2列でgroupbyの出力の個々の列に一意の値を数えたいと思っています。python pandasのgroupby結果のすべての個々の列の数を取得する方法

私の入力データフレームは、次のとおりです。

id number name time method level 
121 567  XYZ  24  run  150 
234 679  ABC  56  floor 120 
121 567  XYZ  26  walk 150 
578 865  EFG  89  fly  430 
965 685  MNO  40  cry  278 
578 865  MNO  67  fly  430 

必要な出力

id number name time method level 
121 567  1  2  2  1 
234 679  1  1  1  1 
578 865  2  2  1  1 
965 685  1  1  1  1 

ので、各GROUPBYのためのユニークな要素([ "ID"、 "数" の数は、私が私の出力にしたいです)]という結果になります。

答えて

3

あなたはnuniquegroupby.aggを使用することができます。

df.groupby(['id', 'number']).agg(pd.Series.nunique) 
Out: 
      name time method level 
id number       
121 567  1  2  2  1 
234 679  1  1  1  1 
578 865  2  2  1  1 
965 685  1  1  1  1 
+0

は、それが解決ありがとう – Ajay

1

は、あなただけの一意の値をカウントし、各シリーズに続いgroupby-applyapplyを使用することができます。

df.groupby(['id','number'])['name', 'time', 'method', 'level']\ 
    .apply(lambda x: x.apply(lambda y: y.drop_duplicates().count()))\ 
    .reset_index([0,1]) 

# Output: 

    id number name time method level 
0 121  567  1  2  2  1 
1 234  679  1  1  1  1 
2 578  865  2  2  1  1 
3 965  685  1  1  1  1 

私はこのことができます願っています。

関連する問題