当需要对数据进行分类汇总时,可以使用Python中的pandas.crosstab()函数。该函数可以将两个或多个变量之间的关系转换为交叉类型表格。
以下是该函数的详细说明:
crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)
返回一个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