如何用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
相关产品推荐
相关产品推荐

