pandas groupby频率
在数据分析中,经常需要对数据进行分组并统计每个分组的频率。Pandas库提供了groupby
函数,可以轻松实现对数据的分组和频率统计。
1. 基本概念
1.1 groupby函数
groupby
函数是Pandas中用于分组的重要函数,它的基本语法如下:
grouped = df.groupby('column_name')
其中,df
是一个DataFrame对象,column_name
是待分组的列名。通过groupby
函数,可以将数据按照指定列进行分组。
1.2 size函数
在分组之后,我们经常需要统计每个分组的频率,即每个分组包含的样本数量。Pandas提供了size
函数用于统计每个分组的大小,语法如下:
grouped.size()
2. 实例演示
接下来,我们通过一个示例来演示如何使用groupby
函数和size
函数进行分组和频率统计。
假设我们有一个包含学生成绩的DataFrame数据,如下所示:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'],
'score': [80, 90, 85, 88, 78, 92, 89, 87]
}
df = pd.DataFrame(data)
print(df)
运行以上代码,可以得到如下输出:
name score
0 Alice 80
1 Bob 90
2 Alice 85
3 Bob 88
4 Alice 78
5 Bob 92
6 Alice 89
7 Bob 87
现在,我们想要按照学生姓名进行分组,并统计每个学生的成绩频率。通过groupby
和size
函数可以轻松实现:
grouped = df.groupby('name')
frequency = grouped.size()
print(frequency)
运行以上代码,可以得到如下输出:
name
Alice 4
Bob 4
dtype: int64
从输出可以看出,Alice和Bob都有4条数据,即每个学生的成绩都出现了4次,这就是频率统计的结果。
3. 高级应用
3.1 多列分组
除了单列分组外,groupby
函数还支持多列分组,可以根据多个列进行分组。例如,我们可以同时按照学生姓名和班级进行分组,并统计每个学生在每个班级的成绩频率:
data = {
'name': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'],
'class': ['A', 'A', 'B', 'B', 'A', 'A', 'B', 'B'],
'score': [80, 90, 85, 88, 78, 92, 89, 87]
}
df = pd.DataFrame(data)
grouped = df.groupby(['name', 'class'])
frequency = grouped.size()
print(frequency)
运行以上代码,可以得到每个学生在每个班级的成绩频率统计结果。
3.2 自定义统计函数
除了使用size
函数外,还可以自定义统计函数,并通过agg
函数应用到分组结果上。例如,我们可以计算每个学生成绩的均值和标准差:
grouped = df.groupby('name')
result = grouped['score'].agg(['mean', 'std'])
print(result)
运行以上代码,可以得到每个学生成绩的均值和标准差统计结果。
4. 总结
通过本文的介绍,我们了解了如何使用Pandas中的groupby
函数和size
函数进行数据分组和频率统计。通过分组和统计,我们可以更好地理解数据的分布情况,为后续的数据分析和建模奠定基础。