使用熊猫数据框如何将计数应用于多级分组列?
问题描述:
我有一个数据框与多个列,我想使用数组后,这样它应用于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
:
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
答
根据您自己的代码,只需执行此操作。
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
嗯,计数用于非NaN计数,所以这里更好的是大小。 – jezrael
@jezrael好的。但'groupby'默认情况下会抛出'nan'值,所以我想现在这种情况并不重要,因为他正在计算组变量。但我同意'尺寸'是一个更好的选择。 – Psidom