让我们考虑以下数据帧:
df = {'Location': ['A','A','B','B','C','C','A','C','A'],
'Gender'['M','M','F','M','M','F','M','M','M'],
'Edu'['N','N','Y','Y','Y','N','Y','Y','Y'],
'Access1': [1,0,1,0,1,0,1,1,1], 'Access2': [1,1,1,0,0,1,0,0,1] }
df = pd.DataFrame(data=d, dtype=np.int8)
数据帧输出:
Access1 Access2 Edu Gender Location
0 1 1 N M A
1 0 1 N M A
2 1 1 Y F B
3 0 0 Y M B
4 1 0 Y M C
5 0 1 N F C
6 1 0 Y M A
7 1 0 Y M C
8 1 1 Y M A
然后我用groupby分析df中的频率
D0=df.groupby(['Location','Gender','Edu']).sum()
((D0/ D0.groupby(level = [0]).transform(sum))*100).round(3).astype(str) + '%'
输出:
Access1 Access2
Location Gender Edu
A M N 33.333% 66.667%
Y 66.667% 33.333%
B F Y 100.0% 100.0%
M Y 0.0% 0.0%
C F N 0.0% 100.0%
M Y 100.0% 0.0%
根据这一结果,我推断,A区33.3%的未受教育男性有权获得1号服务(=access1),这是因为考虑到A区3人有权获得1号服务,其中1名未受教育男性有权获得1号服务(=1/3)。
然而,希望得到不同的输出。我想把A区总共4个人作为我的100%。50%的男性没有受过教育。在50%的未受过教育的男性中,有25%的人可以获得1号服务。所以,我想在表中看到的百分比是25%(A区未受教育男性进入服务1的总数)。Groupby是否是到达目的地的正确方法,以及在考虑从每个位置的引用总人口中进行分解时,衡量服务1访问率的最佳方法是什么?