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

如何用Pandas将像素值分组并统计对应像素数量总和?

Pandas DataFrame像素值分类统计实现方案

原始数据

Value    Count 
0.1457   900  
0.1458   1800
0.1459   900
0.2144   1800  
0.4357   2700
0.5764   900
0.7891   1800
0.7892   900
nan      0
nan      0

需求

将Value分为四类并统计对应结果(无数据类统计行数):

  • Low(<0.2) → 标识Lo,统计对应Count总和
  • Mid(0.2-0.6) → 标识Mid,统计对应Count总和
  • High(>0.6) → 标识Hi,统计对应Count总和
  • No Data(nan) → 标识ND,统计无数据像素的行数

实现代码

import pandas as pd

# 构造示例DataFrame(实际使用时替换为你的数据源)
df = pd.DataFrame({
    'Value': [0.1457, 0.1458, 0.1459, 0.2144, 0.4357, 0.5764, 0.7891, 0.7892, pd.NA, pd.NA],
    'Count': [900, 1800, 900, 1800, 2700, 900, 1800, 900, 0, 0]
})

# 定义数值区间与对应类别标签
bins = [-float('inf'), 0.2, 0.6, float('inf')]
labels = ['Lo', 'Mid', 'Hi']

# 给非NaN值分配类别
df['Class'] = pd.cut(df['Value'], bins=bins, labels=labels)
# 标记NaN对应的类别为ND
df.loc[df['Value'].isna(), 'Class'] = 'ND'

# 分组统计:ND类统计行数,其他类对Count列求和
result = df.groupby('Class').agg(
    Count=('Count', lambda x: x.count() if x.name == 'ND' else x.sum())
).reset_index()

# 调整类别顺序匹配期望输出
result = result.set_index('Class').reindex(['Lo', 'Mid', 'Hi', 'ND']).reset_index()
print(result)

输出结果

Class  Count
0    Lo   3600
1   Mid   6300
2    Hi   2700
3    ND      2

核心逻辑说明

  • pd.cut():快速按设定的数值区间完成非NaN值的类别划分
  • 分组聚合时通过lambda函数区分处理逻辑:NaN类统计行数(对应无数据像素的数量),其他类别对Count列求和
  • reindex():确保输出的类别顺序与预期一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:04:55