如何用Pandas从DataFrame构建布宜诺斯艾利斯地区分类交叉表?
用Pandas优雅生成带总计的分类交叉统计表
需求背景
现有包含阿根廷布宜诺斯艾利斯省地区数据的Pandas DataFrame,需基于REGION(NORTE/SUR)和PERTENENCIA(GBA/INTERIOR)两个分类列,统计各组合下的地区数量,并生成带行/列总计的交叉表(格式如示例所示)。
解决方案
直接使用Pandas的pd.crosstab()函数,配合参数自动生成总计,无需手动计算:
import pandas as pd # 假设你的DataFrame名为df cross_table = pd.crosstab( index=df['REGION'], columns=df['PERTENENCIA'], margins=True, # 启用行/列总计 margins_name='TOTAL'# 总计行/列的名称 ) # 调整列顺序以匹配期望格式 cross_table = cross_table[['GBA', 'INTERIOR', 'TOTAL']] # 输出结果 print(cross_table)
结果说明
执行后会直接生成符合要求的交叉表:
GBA INTERIOR TOTAL REGION NORTE 33 41 74 SUR 0 67 67 TOTAL 33 108 141
关键参数解释
pd.crosstab():Pandas专门用于生成分类交叉统计表的工具,默认统计每个分类组合的出现频次(即地区数量)。margins=True:自动为每行、每列添加总计值。margins_name='TOTAL':指定总计行/列的名称为TOTAL。
可视化适配
生成的交叉表可直接用于后续可视化:
- 堆叠柱状图:
cross_table.drop('TOTAL').plot(kind='bar', stacked=True) - 嵌套饼图:可基于行总计(NORTE/SUR)和列内细分(GBA/INTERIOR)的数据结构直接构建。
内容的提问来源于stack exchange,提问作者Leandro Caplan
相关产品推荐
相关产品推荐

