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

如何在Pandas DataFrame中按分组统计零值与非零值数量?

Pandas实现按语言分组统计零值/非零值数量

首先构造示例数据集:

import pandas as pd

data = {
    'docs': ['example 1', 'example 2', 'example 3', 'example 4', 'example 5', 'example 6'],
    'language': ['python', 'JS', 'python', 'JS', 'python', 'JS'],
    'instance': [25, 15, 0, 34, 0, 0]
}
df = pd.DataFrame(data)

统计零值数量

有两种简洁的实现方式:

  • 先筛选出instance为0的行,再按language分组统计数量:
zero_counts = df[df['instance'] == 0].groupby('language').size().reset_index(name='zero count')
  • 直接分组后,对每组的instance列统计等于0的元素个数:
zero_counts = df.groupby('language')['instance'].apply(lambda x: (x == 0).sum()).reset_index(name='zero count')

输出结果:

language  zero count
0       JS           1
1    python           2

统计非零值数量

同理,两种实现方式:

  • 先筛选instance非零的行再分组:
non_zero_counts = df[df['instance'] != 0].groupby('language').size().reset_index(name='non-zero count')
  • 分组后统计非零元素个数:
non_zero_counts = df.groupby('language')['instance'].apply(lambda x: (x != 0).sum()).reset_index(name='non-zero count')

输出结果:

language  non-zero count
0       JS               2
1    python               1

更高效的一次性统计

如果需要同时获取两种统计结果,可以用agg方法一次性计算,再拆分出所需的DataFrame:

stats_df = df.groupby('language')['instance'].agg(
    zero_count=lambda x: (x == 0).sum(),
    non_zero_count=lambda x: (x != 0).sum()
).reset_index()

# 拆分零值统计DataFrame
zero_counts = stats_df[['language', 'zero_count']].rename(columns={'zero_count': 'zero count'})
# 拆分非零值统计DataFrame
non_zero_counts = stats_df[['language', 'non_zero_count']].rename(columns={'non_zero_count': 'non-zero count'})

除了Pandas外,也可以结合NumPy手动实现分组统计,但Pandas的分组API已经足够简洁高效,是这类场景的首选工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:39:17