我知道我们可以从大熊猫系列的value_counts()
获得标准化值,但是当我们在数据框上执行分组时,获取计数的唯一方法是通过size()
。有没有办法用size()获得规范化的值?
示例:
df = pd.DataFrame({'subset_product':['A','A','A','B','B','C','C'],
'subset_close':[1,1,0,1,1,1,0]})
df2 = df.groupby(['subset_product', 'subset_close']).size().reset_index(name='prod_count')
df.subset_product.value_counts()
A 3
B 2
C 2
DF2
希望得到:
subset_product subset_close prod_count norm
A 0 1 1/3
A 1 2 2/3
B 1 2 2/2
C 1 1 1/2
C 0 1 1/2
subset_product 除了手动计算标准化值为prod_count / total之外,有没有办法获得标准化值?
答案 0 :(得分:2)
我认为不可能只有一个groupby
+ size
,因为groupby
由2列subset_product
和subset_close
组成,需要size
subset_product
仅用于规范化。
Series
的可能解决方案为map
或transform
,df2
与div
的大小相同:
df2 = df.groupby(['subset_product', 'subset_close']).size().reset_index(name='prod_count')
s = df.subset_product.value_counts()
df2['prod_count'] = df2['prod_count'].div(df2['subset_product'].map(s))
或者:
df2 = df.groupby(['subset_product', 'subset_close']).size().reset_index(name='prod_count')
a = df2.groupby('subset_product')['prod_count'].transform('sum')
df2['prod_count'] = df2['prod_count'].div(a)
print (df2)
subset_product subset_close prod_count
0 A 0 0.333333
1 A 1 0.666667
2 B 1 1.000000
3 C 0 0.500000
4 C 1 0.500000