如何在Python中为两个分类变量创建计数透视表?
问题描述
原始数据结构:
| Index | Job | Y | Balance |
|---|---|---|---|
| 1 | A | Yes | 1 |
| 2 | B | No | 2 |
| 3 | A | No | 5 |
| 4 | A | No | 0 |
| 5 | B | Yes | 4 |
期望得到的汇总格式:
| Yes | No | |
|---|---|---|
| A | 1 | 2 |
| B | 1 | 1 |
尝试代码:
pivot = df.pivot_table(index =['job'], columns = ['y'], values = ['balance'], aggfunc ='count')
疑问:无法在不指定balance作为values参数的情况下运行透视表,如何得到目标结果?
解决方案
方法1:使用pd.crosstab(推荐)
这是pandas专门用于交叉计数的函数,直接指定行和列维度即可生成目标表格:
import pandas as pd result = pd.crosstab(df['Job'], df['Y'])
方法2:groupby + value_counts + unstack
先按Job分组,统计每组内Y的取值频次,再通过unstack转换为宽表格式:
result = df.groupby('Job')['Y'].value_counts().unstack(fill_value=0)
方法3:优化pivot_table用法
如果坚持用pivot_table,可以使用aggfunc='size'(统计组内行数,无需指定具体列):
result = df.pivot_table(index='Job', columns='Y', aggfunc='size', fill_value=0)
内容的提问来源于stack exchange,提问作者Piyush Kaushal
相关产品推荐
相关产品推荐

