如何计算重复行中各job对应状态的占比百分比?
问题解决:计算各Job对应Final Status的占比百分比
需求说明
现有含job和final status两列的表格,存在重复数据,需统计每个job下Success、Failed、Unknown三种状态的占比(保留两位小数,如33.33%),最终输出包含各状态占比的结构化表格。
示例数据
输入表格
| job | final status |
|---|---|
| JobA | Success |
| JobA | Failed |
| JobA | Unknown |
| JobB | Success |
| JobB | Failed |
| JobB | Unknown |
期望输出表格
| job | success % | failed % | unknown % |
|---|---|---|---|
| JobA | 33.33% | 33.33% | 33.33% |
| JobB | 33.33% | 33.33% | 33.33% |
Python Pandas实现方案
以下是可直接复用的代码,步骤清晰易理解:
import pandas as pd # 构造示例数据(实际场景可替换为pd.read_csv/pd.read_excel读取你的数据源) data = { 'job': ['JobA', 'JobA', 'JobA', 'JobB', 'JobB', 'JobB'], 'final status': ['Success', 'Failed', 'Unknown', 'Success', 'Failed', 'Unknown'] } df = pd.DataFrame(data) # 1. 统计每个job各状态的出现次数 status_count = df.groupby(['job', 'final status']).size().unstack(fill_value=0) # 2. 计算每个job的总数据量 total_count = status_count.sum(axis=1) # 3. 计算占比,保留两位小数并添加百分号 status_percent = (status_count.div(total_count, axis=0) * 100).round(2).astype(str) + '%' # 4. 调整列名匹配需求格式 status_percent.columns = [col.lower() + ' %' for col in status_percent.columns] # 输出结果 print(status_percent.reset_index())
代码逻辑说明
groupby+size统计各job下的状态频次,unstack将行转列并补全缺失状态的计数为0div(total_count, axis=0)按行(每个job维度)做除法,计算单状态占比round(2)控制小数位数,astype(str)+'%'转换为带百分号的字符串格式
SQL实现方案
如果用SQL处理,可通过窗口函数或分组统计完成:
SELECT job, ROUND(100.0 * SUM(CASE WHEN final_status = 'Success' THEN 1 ELSE 0 END) / COUNT(*), 2) AS "success %", ROUND(100.0 * SUM(CASE WHEN final_status = 'Failed' THEN 1 ELSE 0 END) / COUNT(*), 2) AS "failed %", ROUND(100.0 * SUM(CASE WHEN final_status = 'Unknown' THEN 1 ELSE 0 END) / COUNT(*), 2) AS "unknown %" FROM your_table GROUP BY job;
内容的提问来源于stack exchange,提问作者Sai Sasidhar
相关产品推荐
相关产品推荐

