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

Python实现:按指定公差级别统计DataFrame各列ID数量

需求说明

现有存储在DataFrame中的表格如下:

IDABC
10%1%5%
310%30%50%
6100%300%500%
7700%900%50%
1010%30%50%

需基于公差级别数组 tolerance_level = [0, 1, 5, 10, 20, 30, 50, 100, 200, 300, 500, 700],统计A、B、C列中各公差级别的ID数量:

  • 若列中百分比数值在公差级别列表内,直接归至对应级别统计
  • 若数值不在列表中,归至最近的公差级别;若数值大于列表最大值(700),归至>700%级别
解决方案

实现步骤

  1. 数据预处理:将表格中的百分比字符串转换为整数数值,去除百分号
  2. 级别映射:定义函数将每个数值匹配到对应公差级别,处理超出最大值的情况
  3. 统计计数:对每一列的级别映射结果进行计数,整理成目标格式的DataFrame

代码实现

import pandas as pd
import numpy as np

# 初始化原始数据
raw_data = {
    'ID': [1, 3, 6, 7, 10],
    'A': ['0%', '10%', '100%', '700%', '10%'],
    'B': ['1%', '30%', '300%', '900%', '30%'],
    'C': ['5%', '50%', '500%', '50%', '50%']
}
df = pd.DataFrame(raw_data)

# 定义公差级别及对应标签
tolerance_level = [0, 1, 5, 10, 20, 30, 50, 100, 200, 300, 500, 700]
level_labels = [f'{x}%' for x in tolerance_level] + ['>700%']

# 预处理:将百分比字符串转为整数
for col in ['A', 'B', 'C']:
    df[col] = df[col].str.rstrip('%').astype(int)

# 定义数值到公差级别的映射函数
def map_to_tolerance(value):
    max_level = max(tolerance_level)
    if value > max_level:
        return '>700%'
    # 找到最接近的公差级别
    closest_idx = np.argmin(np.abs(np.array(tolerance_level) - value))
    return f'{tolerance_level[closest_idx]}%'

# 统计各列的级别数量
result_data = {'tolerance_level': level_labels}
for col in ['A', 'B', 'C']:
    mapped_levels = df[col].apply(map_to_tolerance)
    # 按完整级别标签统计,缺失的级别补0
    count_result = mapped_levels.value_counts().reindex(level_labels, fill_value=0)
    result_data[col] = count_result.values

# 生成结果DataFrame
result_df = pd.DataFrame(result_data)
print(result_df)

运行结果

执行代码后得到的真实统计结果如下:

tolerance_levelABC
0%100
1%010
5%001
10%200
20%000
30%020
50%003
100%100
200%000
300%010
500%001
700%100
>700%010

内容的提问来源于stack exchange,提问作者testenthu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:40:23