在Pandas中如何统计包含零计数的分类变量组合值?
实现Pandas多分类列全组合计数(含零值)
在Pandas 2.0.1里,有简洁的惯用方法实现所有分类组合的计数(包括零计数),核心思路是先构造出所有可能的分类组合,再用这个组合对齐原数据的统计结果,填充缺失的零值。
具体实现步骤:
- 从两个分类列的
categories属性中,生成所有可能的笛卡尔积组合(即全分类组合) - 对原DataFrame的目标列调用
value_counts()得到已有组合的计数 - 用
reindex方法将统计结果对齐到全组合索引上,把缺失的计数填为0
直接看代码实现:
import pandas as pd abc_categorical = pd.CategoricalDtype(['a', 'b', 'c'], ordered=True) size_categorical = pd.CategoricalDtype(['s', 'm', 'l'], ordered=True) df = pd.DataFrame({ 'a': pd.Categorical(list('aaabababababa'), dtype=abc_categorical), 'tsize': pd.Categorical(list('smmssmlmlslsl'), dtype=size_categorical), } ) # 生成所有可能的分类组合 all_combinations = pd.MultiIndex.from_product( [df['a'].cat.categories, df['tsize'].cat.categories], names=['a', 'tsize'] ) # 统计已有组合计数,对齐全组合并填充零值 full_counts = df.value_counts().reindex(all_combinations, fill_value=0) print(full_counts)
运行后会得到包含全部9种分类组合的统计结果,未出现的组合(如b&l、c相关所有组合)的计数都会显示为0,完全符合需求。
内容的提问来源于stack exchange,提问作者cbare
相关产品推荐
相关产品推荐

