使用熊猫数据框如何将计数应用于多级分组列?

使用熊猫数据框如何将计数应用于多级分组列?

问题描述:

我有一个数据框与多个列,我想使用数组后,这样它应用于2列或更多列的组合。例如,假设我有两列:使用熊猫数据框如何将计数应用于多级分组列?

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 

我无法得到它。我尝试这样做:

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

,但似乎并没有得到我想要的东西,它会显示4列,而不是3。如何做呢?谢谢。

您在同一时间计数两列,你可以使用groupby.size

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

enter image description here

或计数只有一列:

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

嗯,计数用于非NaN计数,所以这里更好的是大小。 – jezrael

+0

@jezrael好的。但'groupby'默认情况下会抛出'nan'值,所以我想现在这种情况并不重要,因为他正在计算组变量。但我同意'尺寸'是一个更好的选择。 – Psidom

使用GroupBy.size

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?

根据您自己的代码,只需执行此操作。

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