Skip to main content
 首页 » 编程设计

python之加入并计算每个子类别中的值数量

2025年05月04日12yyy_WW

假设有一个如下所示的数据框:

 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