You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于两个分类变量创建Pivot Table透视表,无需指定values参数?

问题:如何在不指定特定values列的情况下生成透视表统计计数

原始数据

索引JobYBalance
1AYes1
2BNo2
3ANo5
4ANo0
5BYes4

目标结果

YesNo
A12
B11

尝试的代码

pivot = df.pivot_table(index=['job'], columns=['y'], values=['balance'], aggfunc='count')

几种可行的解决方案:

1. 用pd.crosstab(最适合这个场景)

这是pandas专门用来做交叉计数统计的工具,不需要指定values列,直接传入行和列的分组字段即可:

import pandas as pd
pd.crosstab(df['Job'], df['Y'])

运行后直接生成你要的交叉计数表,自动按Job和Y的组合统计行数。

2. 用pivot_table替换values列

如果一定要用pivot_table,可以选一个无缺失值的列作为values参数(比如原始数据的「索引」列,甚至Job列本身),因为count统计的是非缺失值数量,只要所选列没有空值,结果就准确:

# 用索引列作为values
df.pivot_table(index='Job', columns='Y', values='索引', aggfunc='count')

# 或者直接用Job列
df.pivot_table(index='Job', columns='Y', values='Job', aggfunc='count')

3. 分组后转置

先通过groupby统计每个Job-Y组合的行数,再用unstack把Y的取值转成列:

df.groupby(['Job', 'Y']).size().unstack(fill_value=0)

size()会直接返回分组后的行数,unstack负责把层级索引展开成列,fill_value=0可以避免出现空值(如果某个组合没有数据的话)。


内容的提问来源于stack exchange,提问作者Piyush Kaushal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 15:00:59