Python Pandas – 统计每个群组中的行数
在数据处理过程中,我们常常需要对数据进行分组并计算每个群组中的行数。在Python中,我们可以使用Pandas库来轻松实现此操作。
创建示例数据集
在开始之前,我们需要创建一个示例数据集来演示分组计数的操作。
以下是一个包含姓名、性别和年龄的示例数据集:
import pandas as pd
data = {
'姓名': ['张三', '李四', '王五', '赵六', '钱七', '刘八'],
'性别': ['男', '女', '女', '男', '男', '男'],
'年龄': [22, 25, 27, 22, 26, 28]
}
df = pd.DataFrame(data)
print(df)
输出结果为:
姓名 性别 年龄
0 张三 男 22
1 李四 女 25
2 王五 女 27
3 赵六 男 22
4 钱七 男 26
5 刘八 男 28
使用groupby方法进行分组计数
现在,我们可以使用groupby方法来对性别进行分组统计。代码如下:
grouped = df.groupby('性别')
result = grouped.size()
print(result)
这里的grouped是一个GroupBy对象,它可以同时处理和计算多个列,而不仅仅是一个列。size()方法用于计算每个群组的行数。输出结果如下:
性别
女 2
男 4
dtype: int64
上述结果说明,在我们的示例数据集中,有2位女性和4位男性。
我们还可以使用count()方法来计算每个群组中每个列的非空值的数量。代码如下:
grouped = df.groupby('性别')
result = grouped.count()
print(result)
输出结果为:
姓名 年龄
性别
女 2 2
男 4 4
使用agg方法计算多个统计量
在一些情况下,我们需要同时计算每个群组中多个统计量。很幸运,Pandas提供了agg方法来完成这个任务。
以下是使用agg方法计算各个群组的平均年龄和最大年龄的完整代码:
grouped = df.groupby('性别')
result = grouped.agg({'年龄': ['mean', 'max']})
print(result)
输出结果为:
年龄
mean max
性别
女 26.000000 27
男 24.500000 28
在上述代码中,agg方法的输入是一个字典,其中字典的键是要计算的列名,而字典的值是要计算的统计量列表。
使用apply方法作用于每个分组
我们可以通过使用apply方法在每个群组中执行自定义函数来计算统计量。
以下是一个示例函数,它可以计算每个群组的年龄平均值:
def average_age(group):
return group['年龄'].mean()
grouped = df.groupby('性别')
result = grouped.apply(average_age)
print(result)
输出结果为:
性别
女 26.000000
男 24.500000
dtype: float64
很明显,这个结果和前面使用agg算法得到的结果是一致的。
结论
Pandas提供了很多用于数据分组统计的方法,它们是灵活、高效且易于实现的。我们可以使用groupby、agg和apply方法来完成各种统计计算。如果您需要在未来的数据分析中,进行数据分组统计的时候,可以考虑使用Pandas来完成这些操作。通过本文的介绍,相信您已经可以掌握Pandas中的基本数据分组统计方法。在实践中,您可以根据特定的需求,使用不同的方法来完成各种复杂的分组计算。
极客笔记