如何用Pandas统计多列中指定值(含未出现值)的出现次数?
解决DataFrame多列指定值统计(含未出现值)的问题
先给出示例数据和依赖库:
import pandas as pd foo = pd.DataFrame({'A':[False,False,True], 'B':[None, False, True], 'C': [None, None, None]})
要统计指定值(比如False、True、None)在每列的出现次数,哪怕列里没出现该值也要显示0,可以用以下方法:
# 定义需要统计的所有目标值 target_values = [False, True, None] # 逐列统计,补全缺失值并填充0 count_result = foo.apply( lambda col: col.value_counts(dropna=False).reindex(target_values, fill_value=0) ).T # 可选:给结果设置更清晰的命名 count_result.index.name = '列名' count_result.columns = ['False', 'True', 'None'] print(count_result)
运行后输出结果:
False True None 列名 A 2 1 0 B 1 1 1 C 0 0 3
关键逻辑说明
value_counts(dropna=False):保留对None的统计,同时统计列内所有出现过的值的次数reindex(target_values, fill_value=0):强制对齐所有目标值,列里没出现的目标值直接填充0,避免遗漏.T转置:把原来的列名转为行索引,统计值作为列,更符合“按列统计”的展示逻辑
为什么pivot_table会报错?
你之前用pivot_table出现KeyError: False,是因为某列(比如示例里的C列)完全没有False这个值,pivot_table找不到对应的索引项就会抛出错误。而上面的方法通过reindex主动补全所有需要统计的目标值,就不会出现这个问题。
内容的提问来源于stack exchange,提问作者euh
相关产品推荐
相关产品推荐

