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

如何高效用Pandas按Shape统计Color并补全缺失类别?

Pandas高效统计含缺失类别的交叉计数

可以通过将Shape和Color列转换为分类类型(Categorical),结合Pandas内置函数快速实现需求,无需手动构造DataFrame,效率更高。

方法一:使用pd.crosstab

先定义固定的类别集合,将DataFrame对应列转为分类类型,这样crosstab会自动包含所有预设类别(即使数据中未出现):

import pandas as pd

data = [{'Shape': 'Circle', 'Color': 'Green'}, {'Shape': 'Circle', 'Color': 'Green'}, {'Shape': 'Circle', 'Color': 'Green'}]
df = pd.DataFrame(data)

# 定义固定的类别范围
shape_cats = ['Circle', 'Square']
color_cats = ['Green', 'Red']

# 转换为分类类型,强制保留所有预设类别
df['Shape'] = pd.Categorical(df['Shape'], categories=shape_cats)
df['Color'] = pd.Categorical(df['Color'], categories=color_cats)

# 生成交叉计数表,自动补全缺失类别的0值
result = pd.crosstab(df['Color'], df['Shape']).fillna(0).astype(int)
print(result)

输出结果:

Circle  Square
Green       3       0
Red         0       0

方法二:使用groupby + unstack

同样先转换为分类类型,通过分组统计数量后展开列,直接用fill_value填充缺失值:

import pandas as pd

data = [{'Shape': 'Circle', 'Color': 'Green'}, {'Shape': 'Circle', 'Color': 'Green'}, {'Shape': 'Circle', 'Color': 'Green'}]
df = pd.DataFrame(data)

shape_cats = ['Circle', 'Square']
color_cats = ['Green', 'Red']

df['Shape'] = pd.Categorical(df['Shape'], categories=shape_cats)
df['Color'] = pd.Categorical(df['Color'], categories=color_cats)

# 分组统计后展开列,缺失组合自动填充0
result = df.groupby(['Color', 'Shape']).size().unstack(fill_value=0)
print(result)

输出结果与上述一致。

关于pivot_table的问题

默认pivot_table只会统计数据中实际存在的类别,不会主动补全预设的缺失类别。而将列转为分类类型后,Pandas的分组、交叉统计函数会识别所有预设类别,从而自动为缺失的组合填充0值,无需额外手动处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:32:05