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

设置as_index=False时Pandas groupby的count方法失效问题

count()与size()在pandas groupby中的行为差异

问题场景

当对仅含word列的DataFrame执行groupby('word', as_index=False).count()时,仅返回分组后的word列,无计数结果;而使用.size()则能得到每个分组的行数统计:

示例代码(count())

import pandas as pd

word_list = ['a', 'b', 'c', 'a', 'c', 'c', 'b', 'a', 'c']
df = pd.DataFrame(word_list, columns=['word'])
as_counts = df.groupby('word', as_index=False).count()
print(as_counts)

输出:

word
0    a
1    b
2    c

示例代码(size())

as_counts = df.groupby('word', as_index=False).size()
print(as_counts)

输出:

word  size
0    a     3
1    b     2
2    c     4

核心差异解析

1. 统计目标不同

  • size():直接统计每个分组的总行数,不管数据是否有缺失,是纯粹的分组行数计数。只要执行分组,它就会生成包含分组键和对应行数的结果,不受原DataFrame列数影响。
  • count():统计的是每个分组中,各非分组列的非缺失值数量。如果你的DataFrame只有分组键这一列(即没有其他可统计的列),count()就没有额外的列可以生成计数结果,最终只会保留分组键列。

2. 结果生成逻辑不同

当设置as_index=False时,分组键会被保留为结果DataFrame的普通列:

  • 对于size():它会在保留分组键列的基础上,新增一列size来存储分组行数。
  • 对于count():它会遍历所有非分组列统计非缺失值,但如果没有非分组列,就只会返回分组键列,没有计数数据。

3. 缺失值处理不同

  • size()不区分缺失值,只要是分组内的行都会被计数。
  • count()会跳过缺失值,只统计各列中不为NaN的条目数。如果DataFrame有其他列但存在缺失值,count()的结果会比size()小。

举个例子,给原DataFrame新增含缺失值的列后:

df['num'] = [1, None, 3, 4, None, 6, 7, 8, None]
print(df.groupby('word', as_index=False).count())

输出:

word  num
0    a    3
1    b    1
2    c    2

这里num列的计数就是每个分组中非缺失值的数量,而size()仍会返回每个分组的总行数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:40:11