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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:39:19