我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

数据集在代码层面上,表现为dataframe,使用df.groupby()可以对数据进行分组,进而可以做特定的统计。换句话说,可以对具有某些特征的样本所具有的属性进行统计。

苏南大叔:泰坦尼克数据集生存率分析,dataframe的groupby用法 - 泰坦尼克groupby
泰坦尼克数据集生存率分析,dataframe的groupby用法(图3-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.12.3pandas@2.2.2numpy@1.26.4xlrd@2.0.1openpyxl@3.1.2

龙套数据样本

本文的龙套数据是titanic3.xls,可以从下面的链接拿到数据:

更多数据源,请参考:

加载.xls样本的代码如下:

import pandas as pd
file = "http://hbiostat.org/data/repo/titanic3.xls"
df = pd.read_excel(file, "titanic3", index_col=None, na_values=['NA'])

苏南大叔:泰坦尼克数据集生存率分析,dataframe的groupby用法 - 读取的数据集
泰坦尼克数据集生存率分析,dataframe的groupby用法(图3-2)

对于本文来说,需要特别注意:这些字段是字符串,并不是数字。会引发一系列的异常信息。

计算生存率

本文主要目的是求泰坦尼克数据集的survived生存率,使用的函数是.mean(),实际上是求平均数。对于泰坦尼克数据集来说,survived的取值是01,计算平均值【恰巧】能得到目标数据。如果不是这种特殊的取值,使用mean()是不能获得目标数据结果的。

鉴于各大教程里面,都使用的是这个.mean()函数计算的泰塔尼克数据集的生存率。所以,本文沿用这个用法。例如:

df.groupby('field').mean()["target"]

正常情况下,是这么使用的:

df.groupby('pclass').mean()["survived"]

可能的报错信息

由于pandas版本的问题,使用.mean()函数的时候,也可能会遇到下面的报错信息:

raise TypeError(f"Could not convert string '{x}' to numeric")
TypeError: Could not convert string 'femalemale' to numeric

样本数据集里面存在着一下非数字的字段,这些字段可能会带来报错。需要对这些非数字字段进行转换,或者删除。但是,最标准的做法就是:添加一个参数numeric_only=True。例如:

df.groupby('pclass').mean(numeric_only=True)["survived"]

部分pandas版本,在做groupby()操作的时候,会有警告信息,类似:observed=False。继续变形写成:

df.groupby('pclass', observed=False).mean(numeric_only=True)["survived"]

分组实例

看看不同等级的船票分组的生存率如何,执行代码:

df.groupby('pclass').mean(numeric_only=True)["survived"]

车票分组之后,再按性别进行分组:

df.groupby(['pclass', 'sex']).mean(numeric_only=True)["survived"]

或者:

df.groupby(['pclass', 'sex'], observed=False).mean(numeric_only=True)["survived"]

苏南大叔:泰坦尼克数据集生存率分析,dataframe的groupby用法 - 分组计算
泰坦尼克数据集生存率分析,dataframe的groupby用法(图3-3)

相关文章

结语

更多python相关文章,请点击苏南大叔的博客文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python