You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算重复行中各job对应状态的占比百分比?

问题解决:计算各Job对应Final Status的占比百分比

需求说明

现有含job和final status两列的表格,存在重复数据,需统计每个job下Success、Failed、Unknown三种状态的占比(保留两位小数,如33.33%),最终输出包含各状态占比的结构化表格。

示例数据

输入表格

jobfinal status
JobASuccess
JobAFailed
JobAUnknown
JobBSuccess
JobBFailed
JobBUnknown

期望输出表格

jobsuccess %failed %unknown %
JobA33.33%33.33%33.33%
JobB33.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将行转列并补全缺失状态的计数为0
  • div(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:15:12