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

如何基于零值与非零值计算均值及分组统计非零值占比

按ID统计非零值占比的实现方法

下面针对你的需求,提供几种常用工具的实现方案:

1. SQL 方案

假设你的数据存储在名为your_table的数据库表中,执行以下SQL语句即可得到目标结果:

SELECT
    ID,
    COUNT(*) AS n,
    CONCAT(ROUND(SUM(CASE WHEN Released != 0 THEN 1 ELSE 0 END) / COUNT(*) * 100, 0), '%') AS RateReleased
FROM your_table
GROUP BY ID;
  • COUNT(*):统计每个ID对应的总记录数
  • SUM(CASE WHEN Released != 0 THEN 1 ELSE 0 END):统计每个ID的非零值数量
  • 最后通过除法计算占比,用ROUND取整、CONCAT拼接百分号,得到百分比格式的结果

2. Excel 方案

如果用Excel处理本地数据,按以下步骤操作:

  • 提取唯一ID:在空白列(比如D列)输入=UNIQUE(A:A),自动生成所有不重复的ID
  • 统计总条数n:在E2单元格输入=COUNTIF(A:A, D2),下拉填充到所有ID行,得到每个ID的总记录数
  • 计算非零值占比:在F2单元格输入=COUNTIFS(A:A, D2, B:B, "<>0")/E2,下拉填充后,选中F列设置单元格格式为「百分比」(保留0位小数)

3. Python pandas 方案

用pandas库处理数据,代码示例如下:

import pandas as pd

# 构造示例数据(实际可通过pd.read_csv读取本地文件)
df = pd.DataFrame({
    'ID': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
    'Released': [2, 2, 0, 0, 20, 15, 9, 0]
})

# 分组计算统计指标
result = df.groupby('ID').agg(
    n=('Released', 'count'),
    non_zero_count=('Released', lambda x: (x != 0).sum())
).assign(
    RateReleased=lambda x: (x['non_zero_count'] / x['n'] * 100).astype(int).astype(str) + '%'
).drop('non_zero_count', axis=1).reset_index()

print(result)

执行后会输出符合要求的统计结果,其中:

  • groupby('ID')按ID分组
  • agg方法分别统计总记录数和非零值数量
  • assign方法计算占比并转换为百分比字符串格式

内容的提问来源于stack exchange,提问作者BD'auria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:33:12