python - 使用 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
其中,费率反映了相应名称的每个状态值的百分比细分。
我不确定如何(或者如果可以的话)将该百分比值添加到此数据透视表中。
谢谢。
解决方案
运行这个(在你的代码之后):
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
推荐阅读
- python-3.x - Python loop on list
- mongodb - 如何使用 mongodb scala 驱动程序在 insertOne 后返回 mongodb ObjectId _id
- python - how do I write to a file and not removing the content of the text file
- reactjs - 启动反应应用程序时出现 Webpack 错误 - linux mint
- git - git cherry pick but recive fatal: Unknown commit pick
- c# - 预处理器(指令)相似度
- mysql - 在没有连接的情况下合并两个表
- delphi - 一次比较多个值
- javascript - Vue.js:订阅和修改从父组件到子组件的所有事件
- windows - 无法激活 Windows 应用商店应用 - 应用未启动