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

Python使用Pandas/Numpy统计多列及分组后的正负零值数量

Pandas正负零值统计实现方案

基础统计需求(不分组)

实现逻辑

通过自定义统计函数,对目标列分别统计大于0、小于0、等于0的记录数,NaN值在布尔判断时会自动被识别为False,无需额外过滤。

实现代码

import pandas as pd
import numpy as np

# 构造数据(字典列表转DataFrame,若已有DataFrame可跳过此步)
data = [{'id': 1, 'ltp': 2, 'change': np.nan},
        {'id': 2, 'ltp': 5, 'change': 1.5},
        {'id': 3, 'ltp': 3, 'change': -0.4},
        {'id': 4, 'ltp': 0, 'change': 2.0},
        {'id': 5, 'ltp': 5, 'change': -0.444444},
        {'id': 6, 'ltp': 16, 'change': 2.2}]
df = pd.DataFrame(data)

# 定义正负零统计函数
def count_pos_neg_zero(s):
    return pd.Series({
        'positive': (s > 0).sum(),
        'negative': (s < 0).sum(),
        'zero': (s == 0).sum()
    })

# 对目标列应用统计函数,调整输出格式
target_cols = ['ltp', 'change']
res = df[target_cols].apply(count_pos_neg_zero).T.reset_index()
res.columns = ['columns', 'positive', 'negative', 'zero']
print(res)

输出结果

columns  positive  negative  zero
0     ltp         5         0     1
1  change         3         2     0

分组统计需求(按type字段分组)

实现逻辑

在基础统计逻辑上,先按type字段分组,再对每个分组内的目标列执行相同的统计逻辑,最后调整索引格式即可。

实现代码

# 先给原数据集新增type列
df['type'] = ['a', 'a', 'a', 'b', 'b', 'b']

# 分组后应用统计函数
grouped_res = df.groupby('type', group_keys=True)[target_cols].apply(
    lambda x: x.apply(count_pos_neg_zero).T
)

# 调整输出格式
grouped_res = grouped_res.reset_index().rename(columns={'level_1': 'columns'})
print(grouped_res)

输出结果

type columns  positive  negative  zero
0    a     ltp         3         0     0
1    a  change         1         1     0
2    b     ltp         2         0     1
3    b  change         2         1     0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:57:03