DataFrameGroupBy.size()

292 阅读2分钟

DataFrameGroupBy.size() 是 Pandas 中用于对数据进行 分组 后统计每个组的 行数 的方法。它返回的是每个分组的大小(即每个组中有多少行),在 groupby 操作后,通常用于统计每个组的记录数量。

基本语法

DataFrameGroupBy.size()
  • 返回值:返回一个 Series,其中索引是分组的标签(即按 groupby 分组的列),值是每个分组的行数。

常见用法

1. 按某一列分组,统计每个分组的大小

假设有以下 DataFrame:

import pandas as pd

# 示例数据
data = {
    'url': ['a.com', 'b.com', 'a.com', 'a.com', 'b.com'],
    'value1': [1, 2, 3, None, 5],
    'value2': [None, 4, 5, 6, 7]
}

df = pd.DataFrame(data)

你可以使用 size() 来统计每个 url 的行数:

# 按 'url' 列分组,统计每个组的大小
group_sizes = df.groupby('url').size()
print(group_sizes)

输出

url
a.com    3
b.com    2
dtype: int64

解释

  • a.com 出现了 3 次,b.com 出现了 2 次。size() 返回每个 url 分组的行数。

2. 统计多个列的组合

你也可以根据多个列进行分组,统计每个组合的行数。例如:

group_sizes = df.groupby(['url', 'value1']).size()
print(group_sizes)

输出

url    value1
a.com  1.0       1
       3.0       1
b.com  2.0       1
       5.0       1
dtype: int64

解释

  • 结果表示每个 urlvalue1 组合的行数。例如,a.comvalue1 为 1.0 的组合有 1 行。

3. 重置索引并将结果转换为 DataFrame

size() 返回的是一个 Series,如果你想将其转换为 DataFrame,可以使用 reset_index()

# 按 'url' 列分组,统计每个组的大小,并将结果转换为 DataFrame
df_size = df.groupby('url').size().reset_index(name='url_count')
print(df_size)

输出

     url  url_count
0  a.com          3
1  b.com          2

解释

  • reset_index(name='url_count') 将结果从 Series 转换为 DataFrame,并且将计数列命名为 url_count

4. 忽略缺失值

size() 统计的是每个分组的行数,而不是非缺失值的数量。如果某些行的列值是缺失的,但仍然属于某个分组,size() 会把这些行计入分组的大小。如果你只关心非缺失值的数量,可以使用 .count()

5. 计算带有多级索引的分组大小

当使用多列分组时,size() 会返回一个带有多级索引(MultiIndex)的 Series。

group_sizes = df.groupby(['url', 'value1']).size()
print(group_sizes)

输出

url    value1
a.com  1.0       1
       3.0       1
b.com  2.0       1
       5.0       1
dtype: int64

总结

  • size() 统计的是每个分组的 行数(即每个分组包含多少条数据)。
  • 返回值:返回一个 Series,索引为分组的键,值为每个组的大小。
  • 常用场景:用于了解数据中每个分组的大小,快速了解每个类别或组合的记录数。
  • count() 区别count() 统计的是每个组中非缺失值的数量,而 size() 统计的是每个组的总行数,包括缺失值。

这个方法非常适用于 数据分组 后对各个分组进行统计、计数等操作,尤其在数据分析、数据清洗和探索性分析过程中很有用。