首页 > 解决方案 > 使用 GroupBy 将分类数据计算为 Pandas 数据框中每个类别的百分比

问题描述

我有一个 Pandas 数据框,其中COLOR包含分类数据的列 -

  ZIP    YEAR    COLOR
11111    1990        0   
11111    1990        1
11111    2000        1 
11111    2000        1
22222    1990        0
22222    1990        0
22222    2000        0
22222    2000        1

如何按ZIPYEAR列 ( df.groupby(['ZIP', 'YEAR'])) 聚合数据并将分类数据计算为每个类别的百分比,以使结果类似于下面的数据框?

  ZIP    YEAR        COLOR
                  0      1

11111    1990    50     50        
         2000     0    100
22222    1990   100      0         
         2000    50     50
import pandas as pd

df = pd.DataFrame([{11111, 1990, 0},
                   {11111, 1990, 1}, 
                   {11111, 2000, 1}, 
                   {11111, 2000, 1}, 
                   {22222, 1990, 0}, 
                   {22222, 1990, 0}, 
                   {22222, 2000, 0}, 
                   {22222, 2000, 1}]
                  , columns=["ZIP", "YEAR", "COLOR"]
                 )

标签: pythonpandas

解决方案


尝试:

df.groupby(["ZIP", "YEAR"])["COLOR"].value_counts(normalize=True).mul(100).unstack("COLOR").fillna(0)

输出:

COLOR           0      1
ZIP   YEAR
11111 1990   50.0   50.0
      2000    0.0  100.0
22222 1990  100.0    0.0
      2000   50.0   50.0

推荐阅读