假设有一个如下所示的数据框:
V290 V311
0 GOOD TOP QUARTER
1 NK-UNASCERTAIN MIDDLE HALF
2 AVERAGE TOP QUARTER
3 POOR NK-UNASCERTAIN
4 POOR MIDDLE HALF
5 GOOD MIDDLE HALF
6 POOR TOP QUARTER
7 AVERAGE MIDDLE HALF
8 POOR MIDDLE HALF
9 AVERAGE MIDDLE HALF
10 POOR MIDDLE HALF
11 POOR MIDDLE HALF
12 AVERAGE MIDDLE HALF
13 AVERAGE TOP QUARTER
我想按 ['V311'] 对这些数据进行分组,并查看每个 ['V311'] 子类别中有多少个好或差。 我想做这样的事情:
Top Quarter:GOOD:12
POOR:30
Average:15
Middle half:GOOD:5
POOR:19
Average:3
等等……
请您参考如下方法:
你可以用 unstack 做 pivot 即
df.pivot_table(index='V290',columns='V311',aggfunc='size',fill_value=0).unstack()
V311 V290
MIDDLE HALF AVERAGE 3
GOOD 1
NK-UNASCERTAIN 1
POOR 4
NK-UNASCERTAIN AVERAGE 0
GOOD 0
NK-UNASCERTAIN 0
POOR 1
TOP QUARTER AVERAGE 2
GOOD 1
NK-UNASCERTAIN 0
POOR 1
dtype: int64
还有:
df.groupby(['V290','V311']).size().unstack().fillna(0).unstack()
如果你想要百分比那么你可以除以总和即
ndf = df.pivot_table(index='V290',columns='V311',aggfunc='size',fill_value=0)
percents = (ndf/ndf.sum()*100).unstack()
V311 V290
MIDDLE HALF AVERAGE 33.333333
GOOD 11.111111
NK-UNASCERTAIN 11.111111
POOR 44.444444
NK-UNASCERTAIN AVERAGE 0.000000
GOOD 0.000000
NK-UNASCERTAIN 0.000000
POOR 100.000000
TOP QUARTER AVERAGE 33.333333
GOOD 33.333333
NK-UNASCERTAIN 0.000000
POOR 33.333333
dtype: float64
