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
解释:
- 结果表示每个
url和value1组合的行数。例如,a.com和value1为 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()统计的是每个组的总行数,包括缺失值。
这个方法非常适用于 数据分组 后对各个分组进行统计、计数等操作,尤其在数据分析、数据清洗和探索性分析过程中很有用。