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

