Pandas 多层次分组(按子总体百分比) 让我们考虑下面的数据框: 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
数据帧的输出:Pandas 多层次分组(按子总体百分比) 让我们考虑下面的数据框: 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,pandas,frequency,percentage,pandas-groupby,multi-level,Pandas,Frequency,Percentage,Pandas Groupby,Multi Level,数据帧的输出: 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, dty
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=访问1是考虑到位置A中有3人获得服务1的结果,其中1名未受教育男子获得服务1=1/3
然而,我们希望获得不同的输出。我想考虑总共有4个人在A位置作为我的100%。这类男性中有50%没有受过教育。在这50%的未受过教育的男性中,25%有机会获得服务1。所以,我想在表中看到的百分比是A区未受过教育的男性总数的25%,他们使用服务1。groupby是否是到达目的地的正确方法,在考虑从每个地点的参考总人口中进行分类时,衡量服务1访问率的最佳方法是什么 我认为需要将D0除以一系列映射的多索引的第一级:
详情:
这75%是从哪里来的?为什么3个人可以使用服务1?从您受过教育的男性看来,似乎只有2人可以访问1,即第6行和第8行。您是正确的,我根据该反馈对其进行了编辑。我希望在输出的第一行中看到A区访问服务1的男性总人数中未受教育男性的百分比。这很有用,但我会得到ValueError:操作数不能与形状一起广播。。。。如果我在数据集中有一些空白。如何管理它?@Nicola-你的pandas vesrion是什么?版本:'0.20.3'@Nicola-我在pandas 0.23.1中进行了测试,效果很好。