关键词

Python中的pandas.crosstab()函数

当需要对数据进行分类汇总时,可以使用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()函数进行分类汇总分析。

本文链接:http://task.lmcjl.com/news/17222.html

展开阅读全文