如何使用pandas将DataFrame的y/n条目转换为计数统计列
问题解答
pandas提供了原生的高效实现,不需要逐列手动调用value_counts,以下是两种符合要求的实现方案:
方案1:简洁写法(适配小数据集)
先基于你给出的样例构造测试数据:
import pandas as pd # 构造样例DataFrame df = pd.DataFrame({ 'A': ['y', 'n', 'y', 'n', 'y', 'y'], 'B': ['n', 'y', 'n', 'y', 'n', 'n'], 'C': ['y', 'n', 'y', 'n', 'y', 'y'], 'D': ['n', 'y', 'y', 'n', 'n', 'n'] })
核心实现仅需1行代码:
count_result = df.apply(pd.value_counts).fillna(0).astype(int).T
输出结果完全匹配你需要的格式:
n y A 2 4 B 4 2 C 2 4 D 4 2
代码说明:
apply(pd.value_counts)会自动对所有列批量执行值计数,返回结果的索引为y/n,列名为原表的A/B/C/D列.T对结果做转置,把原列名转为行索引、y/n转为列名fillna(0)用于处理某一列仅出现y或仅出现n的场景,缺失的计数补0,astype(int)将计数值转为整数类型,避免出现浮点数
方案2:高性能写法(适配大数据集)
如果你的数据量在百万行级别,可以使用pandas内置的列联统计函数crosstab实现,性能远高于apply写法,且不需要额外做转置、补0操作:
count_result = pd.crosstab(df.melt()['variable'], df.melt()['value'])
返回结果和方案1完全一致,crosstab是pandas原生设计用于分类值计数统计的函数,会自动遍历所有列统计y/n的出现次数,直接输出你需要的行列结构。
内容的提问来源于stack exchange,提问作者PreachaMan
相关产品推荐
相关产品推荐

