首页 > 解决方案 > 使用 pandas 数据透视表创建值条目的百分比细分

问题描述

我正在用 Python 读取一个 csv 文件并尝试创建一个反映第二个索引值计数的多索引数据透视表。该部分有效,但是我还希望有一列表示此计数代表第一个索引值的百分比。

我的输入如下所示:

Name,Code,Status
AAA_BBB_CCC_DDD,BBB,SUCCESS
AAA_BBB_CCC_DDD,BBB,FAILURE
AAA_BBBB_CCC_DDDDDD,BBBB,SUCCESS
AAA_B_ZZ_CC_DDD,B_ZZ,SUCCESS
AAA_BBB_CCC_DDD,BBB,UNKNOWN
AAA_BBB_CCC_DDD,BBB,SUCCESS

我目前的数据透视表是这样的:

jobs = pd.read_csv(jobs_path.csv)
Job_Status_pv = pd.pivot_table(jobs, index=['Name', 'Status'],
                               values='Code',
                               aggfunc=pd.Series.count,
                               margins=True,
                               margins_name='Total Count')
Job_Status_pv.rename(columns={'Code': 'Count'}, inplace=True)

这给了我这个输出:

    Name            Status      Count
AAA_BBBB_CCC_DDDDDD SUCCESS     1
AAA_BBB_CCC_DDD     FAILURE     1
                    SUCCESS     2
                    UNKNOWN     1
AAA_B_ZZ_CC_DDD     SUCCESS     1
    Total Count                 6

我想要这样的东西-

    Name            Status      Count       Rate
AAA_BBBB_CCC_DDDDDD SUCCESS     1           100
AAA_BBB_CCC_DDD     FAILURE     1           25
                    SUCCESS     2           50
                    UNKNOWN     1           25
AAA_B_ZZ_CC_DDD     SUCCESSS    1           100
    Total Count                 6

其中,费率反映了相应名称的每个状态值的百分比细分。

我不确定如何(或者如果可以的话)将该百分比值添加到此数据透视表中。

谢谢。

标签: pythonpivot-table

解决方案


运行这个(在你的代码之后):

Job_Status_pv["pct"] = Job_Status_pv.Count / Job_Status_pv.groupby("Name").transform("sum")["Count"] * 100

结果是:

                             Count    pct
Name                Status               
AAA_BBBB_CCC_DDDDDD SUCCESS      1  100.0
AAA_BBB_CCC_DDD     FAILURE      1   25.0
                    SUCCESS      2   50.0
                    UNKNOWN      1   25.0
AAA_B_ZZ_CC_DDD     SUCCESS      1  100.0
Total Count                      6  100.0

推荐阅读