我跑完后有一个groupby对象:
grouped_mask=L2014_2.groupby(['state'])
grouped_mask.mask.value_counts()
state mask
AL False 105931
True 77
AR False 67788
True 1774
AZ False 90068
True 151
CA False 586184
True 4
CO False 75188
True 14360
CT False 78270
True 1
现在我需要计算每个州的真实百分比。有没有办法做到这一点?
答案 0 :(得分:3)
您也可以设置normalize
参数以获取相对频率:
grouped_mask.mask.value_counts(normalize=True)
只需乘以100得到百分比: - )
问候
答案 1 :(得分:1)
你可以在第一级groupby
然后应用一个lambda,它将真/假计数除以总和:
In [20]:
df.groupby(level=0).apply(lambda x: x/x.sum() * 100)
Out[20]:
Count
state mask
AL False 99.927364
True 0.072636
AR False 97.449757
True 2.550243
AZ False 99.832629
True 0.167371
CA False 99.999318
True 0.000682
CO False 83.963908
True 16.036092
CT False 99.998722
True 0.001278
要过滤上述内容以获取False
标签,您可以使用slice
s进行高级索引:
In [33]:
gp = df.groupby(level=0).apply(lambda x: x/x.sum() * 100)
gp.loc(axis=0)[slice(None),False]
Out[33]:
Count
state mask
AL False 99.927364
AR False 97.449757
AZ False 99.832629
CA False 99.999318
CO False 83.963908
CT False 99.998722
答案 2 :(得分:0)
gp=grouped_mask.mask.value_counts().groupby(level=0).apply(lambda x: 100*x/float(x.sum()))
state mask
AL False 94.37
True 5.63
AR False 73.85
True 26.15
AZ False 91.88
True 8.12
CA False 99.57
True 0.43
CO False 64.66
True 35.34
gp.sort_index(level=0)
gp.loc(axis=0)[slice(None),False]
KeyError:'MultiIndex Slicing要求索引完全是lexsorted tuple len(2),lexsort depth(1)'