2017-07-31 16 views
1

私は複数の列を持つデータフレームを持っており、2つ以上の列の組み合わせに適用されるようにgroup byの後にcountを使用したいと思います。パンダのデータフレームを使用する複数レベルのグループ化された列にカウントを適用する方法は?

user_id product_name 
1  Apple 
1  Banana 
1  Apple 
2  Carrot 
2  Tomato 
2  Carrot 
2  Tomato 
3  Milk 
3  Cucumber 

...

私は何を達成したいことは、このようなものですが:

user_id product_name Product_Count_per_User 
1  Apple  1 
1  Banana  2 
2  Carrot  2 
2  Tomato  2 
3  Milk   1 
3  Cucumber  1 

私はそれを得ることができない、たとえば、のは、私は2つの列を持っているとしましょう。私はこの試みた:

dcf6 = df3.groupby(['user_id','product_name'])['user_id', 'product_name'].count() 

を私が欲しいものを得るように見えることはありません、それは4列の代わりに、それに行う方法3を表示していますか?ありがとう。あなたは、同時に2つの列を数えている

答えて

3

、あなただけgroupby.size使用することができます。

df.groupby(['user_id','Product_Name'])['user_id'].size() 
+0

Hmmmは、NaN数がカウントされないために使用されます。したがって、ここではサイズがよくなります。 – jezrael

+0

@jezraelしかし 'groupby'はデフォルトで' nan'値を落としますので、グループ変数を数えているので、この場合はそれほど重要ではないと思います。しかし、私はここでは「サイズ」がより良い選択であることに同意します。 – Psidom

3

使用GroupBy.size

(df.groupby(['user_id', 'Product_Name']).size() 
    .rename('Product_Count_per_User').reset_index()) 

enter image description here

または1列のみをカウント

dcf6 = df3.groupby(['user_id','Product_Name']).size() 
      .reset_index(name='Product_Count_per_User') 
print (dcf6) 
    user_id Product_Name Product_Count_per_User 
0  1  Apple      2 
1  1  Banana      1 
2  2  Carrot      2 
3  2  Tomato      2 
4  3  Cucumber      1 
5  3   Milk      1 

What is the difference between size and count in pandas?

0

独自のコードをベースにしてください。

df.groupby(['user_id','product_name'])['user_id']. 
      agg({'Product_Count_per_User':'count'}).reset_index(level=1) 

     product_name Product_Count_per_User 
user_id      
1    Apple  2 
1    Banana  1 
2    Carrot  2 
2    Tomato  2 
3   Cucumber  1 
3    Milk  1 
関連する問題