python - 如何获得分组大小的百分比
问题描述
我正在寻找一种获得百分比的方法
df.groupby(['state', 'approved_or_not']).size()
Output:
school_state project_is_approved
AK 0 55
1 290
AL 0 256
1 1506
AR 0 177
1 872
AZ 0 347
1 1800
这很好,但我想要的是百分比而不是计数。
school_state project_is_approved
AK 0 0.16
1 0.84
AL 0 0.14
1 0.86
我试过了,想不出办法。感谢有人可以提供帮助吗?
解决方案
SeriesGroupBy.value_counts
与参数一起使用normalize=True
:
df.groupby('state')['approved_or_not'].value_counts(normalize=True)
样品:
np.random.seed(2019)
L = list('ABC')
df = pd.DataFrame({'state':np.random.choice(L, size=10),
'approved_or_not':np.random.choice([0,1], size=10)})
print (df)
state approved_or_not
0 A 0
1 C 0
2 B 1
3 A 0
4 C 1
5 C 1
6 A 0
7 B 0
8 A 0
9 C 1
a = df.groupby(['state', 'approved_or_not']).size()
print (a)
A 0 4
B 0 1
1 1
C 0 1
1 3
dtype: int64
a = df.groupby('state')['approved_or_not'].value_counts(normalize=True)
print (a)
state approved_or_not
A 0 1.00
B 0 0.50
1 0.50
C 1 0.75
0 0.25
Name: approved_or_not, dtype: float64
Series.div
编辑:您可以按sum
第一级除以state
:
a = df.groupby(['state', 'approved_or_not']).size()
a = a.div(a.sum(level=0), level=0)
print (a)
state approved_or_not
A 0 1.00
B 0 0.50
1 0.50
C 0 0.25
1 0.75
dtype: float64
推荐阅读
- android - Android-如何在适配器中扩展 AppCompatActivity()?
- viewvc - viewvc 彩色并排差异?
- reactjs - 使用空数组作为输入的`useCallback`和没有第二个参数的`useCallback`有什么区别?
- jestjs - 如何使用 vue 测试工具触发 v-autocomplete “输入”事件?
- python - python中的jsonschema Draft7多种自定义类型
- python - 使用 Fabric 运行进程挂起
- php - 不在数据库中插入数据
- r - 如何从闪亮的 textInput 更新字符向量?
- gwt - GWT 小部件继承和组合
- python - seaborn set style 去掉了despine配置的边框