Python之groupby()及aggregate()方法
目录
- 数据准备
- df.describe()
- 思考1
- 分组 pd.groupby()
- 思考2
- df.aggregate()
- 思考1
现在有一份titanic_train.csv,包含泰坦尼克号乘客信息及获救情况的明细数据,我们需要使用一些聚合函数,统计相关指标。
数据准备
import pandas as pd
df = pd.read_csv(r'titanic_train.csv')
print(df)
df.describe()
pandas中提供了一个非常方便的方法df.describe(),来列出常用的统计值,包括:计数值(count),平均值(mean),标准差(std),最小值(min),最大值(max)等。
import pandas as pd
df = pd.read_csv(r'titanic_train.csv')
print(df.describe())
思考1
如果我现在想看按性别分组之后的describe()该怎么办呢?
print(df.groupby('Sex').describe().unstack())
分组 pd.groupby()
当我们直接使用统计值时,可以知道整体状况,比如所有人的年龄的平均值,但是比如我们想要知道:男性和女性的年龄分别是多少。这时我们就需要使用 pd.groupby(). pd.groupby() 的工作原理就是:分割,应用,组合。
计算按性别分组后,乘客年龄的平均值
print(df.groupby('Sex')['Age'].mean())
思考2
如果我现在想计算按性别分组后,乘客年龄的平均值,最大值,最小值,该怎么做呢?
print(df.groupby('Sex')['Age'].aggregate(['mean','min','max']))
df.aggregate()
计算按性别分组后,乘客获救的总数及船费的最大值
print(df.groupby('Sex').aggregate({'Survived': 'sum', 'Fare': 'max' }))
思考1
现在我们思考一个问题,其实groupby()及aggregate()方法很像我们使用的sql,可以进行各种分组聚合操作,那where呢?如何在pandas中实现where呢?这就要使用到filter()函数。
第一种情况:假如我们的样本(即数据集)现在只要年龄>70岁的乘客,该怎么操作呢?
### 方法1
print(df.loc[df.Age >70 ,df.columns])
### 方法2
print(df[df.Age >70])