当需要对数据进行分类汇总时,可以使用Python中的pandas.crosstab()函数。该函数可以将两个或多个变量之间的关系转换为交叉类型表格。
以下是该函数的详细说明:
pandas.crosstab()函数
crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)
参数说明
- index: 需要放入行方向的数据
- columns: 需要放入列方向的数据
- values: 需要汇总统计的数据,默认为 None
- rownames: 行方向名称,即行索引名称
- colnames: 列方向名称,即列索引名称
- aggfunc: 需要使用的聚合函数名称或自定义函数,默认为计数函数(count)
- margins: 是否显示行总和/列总和,默认为False,即不显示
- margins_name: 行总和/列总和的名称,默认为"All"
- dropna: 是否删除包含NaN的行或列,默认为True,即删除
- normalize: 是否对结果进行规范化处理
返回值
返回一个pandas.DataFrame对象,其中包含交叉类型表格统计的结果。
示例
例如,我们有以下数据:
姓名 | 性别 | 年龄 | 邮箱 | 手机 |
---|---|---|---|---|
张三 | 男 | 20 | zhangsan@qq.com | 1333333 |
李四 | 女 | 18 | lisi@163.com | 1444444 |
王五 | 男 | 22 | wangwu@126.com | 1555555 |
赵六 | 女 | 20 | zhaoliu@139.com | 1666666 |
钱七 | 男 | 21 | qianqi@qq.com | 1777777 |
孙八 | 女 | 19 | sunba@126.com | 1888888 |
周九 | 男 | 18 | zhoujiu@163.com | 1999999 |
吴十 | 女 | 22 | wush@139.com | 1000000 |
如果我们想要查看性别和年龄的组合分布情况,可以使用以下代码:
import pandas as pd
data = pd.read_excel("data.xlsx") # 读取数据
ctab = pd.crosstab(index=data["性别"], columns=data["年龄"])
print(ctab)
该代码将返回一个数据表,表格行代表性别,表格列代表年龄,交叉单元格中的数值表示对应性别和年龄的人数。
年龄 | 18 | 19 | 20 | 21 | 22 |
---|---|---|---|---|---|
女 | 2 | 1 | 1 | 0 | 2 |
男 | 1 | 1 | 1 | 1 | 1 |
我们还可以结合一个数据字段的值进行筛选统计。例如,我们想要查看邮箱是否包含了“@163.com”这个关键字的人,可以使用以下代码:
import pandas as pd
data = pd.read_excel("data.xlsx") # 读取数据
ctab = pd.crosstab(index=data["性别"], columns=data["年龄"], values=data["手机"] > 1500000)
print(ctab)
该代码将返回一个数据表,在原来的基础上增加了一列为Boolean类型(True/False),表示对应行中是否有手机大于1500000的人。
年龄 | 18 | 19 | 20 | 21 | 22 |
---|---|---|---|---|---|
女 | 1 | 0 | 0 | 0 | 1 |
男 | 0 | 0 | 1 | 1 | 1 |
上述操作只是众多可能的用法之一,可以根据具体的数据处理需求,灵活运用crosstab()函数进行分类汇总分析。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中的pandas.crosstab()函数 - Python技术站