0

0

如何在Pandas中高效统计分类变量频次并重塑为宽格式汇总表

心靈之曲

心靈之曲

发布时间:2026-01-22 22:37:01

|

950人浏览过

|

来源于php中文网

原创

如何在Pandas中高效统计分类变量频次并重塑为宽格式汇总表

本文介绍三种简洁高效的pandas方法,将问卷类yes/no分类数据按题目维度统计响应频次,并输出为“响应类型×题目”的标准宽格式汇总表,适用于报告生成与可视化前置处理。

在处理结构化问卷数据时,常需将原始的长形响应记录(每行一个客户、每列一个问题)转化为按响应类别(如 Yes/No)横向汇总的统计表。这种宽格式结果便于快速比较各题倾向性,也更适合作为图表输入或嵌入业务看板。

以下提供三种推荐方案,兼顾简洁性、通用性与可读性:

✅ 方法一:布尔求和法(最简,仅适用于二元分类)

适用于严格只有 'Yes' 和 'No' 的场景,性能最优:

import pandas as pd

# 假设 df 为原始数据框
questions = df.filter(like='Question')  # 提取所有 Question_* 列
yes_counts = questions.eq('Yes').sum()  # 每列中 'Yes' 的数量(自动转布尔后求和)
no_counts = len(df) - yes_counts        # 推导 'No' 数量

result = pd.DataFrame({'Yes': yes_counts, 'No': no_counts}).T
result.index.name = 'Response'
✅ 优势:代码极简、执行快;❌ 局限:仅支持明确二值,无法扩展至多类(如 'Yes'/'No'/'Maybe')。

✅ 方法二:melt + value_counts(通用稳健)

无需预设类别,自动识别全部唯一值,推荐作为默认选择:

Background Eraser
Background Eraser

AI自动删除图片背景

下载
melted = df.filter(like='Question').melt(var_name='Question', value_name='Response')
result = (melted.value_counts(['Response', 'Question'])
          .unstack('Question', fill_value=0)
          .rename_axis(index=None, columns=None))

此方法先将问题列“熔解”为两列(Question, Response),再对组合频次计数,最后透视为宽表。自动覆盖所有响应值(包括意外空值或新增选项),且 fill_value=0 确保缺失组合补零。

✅ 方法三:crosstab(语义清晰,专为交叉表设计)

语义最直观,适合强调“响应 × 题目”关系的场景:

stacked = df.filter(like='Question').stack()  # 转为 Series,索引含 (client_id, question)
result = pd.crosstab(stacked, stacked.index.get_level_values(1))
result.index.name = 'Response'
result.columns.name = None

? 注意事项与最佳实践

  • 列筛选安全:使用 df.filter(like='Question') 比硬编码列名更健壮,避免因列顺序变动或新增字段导致错误;
  • 索引对齐:所有方法均保持题目列为列名、响应类型为行索引,与目标格式完全一致;
  • 空值处理:melt 和 crosstab 默认忽略 NaN;若需统计空值,可在 melt() 中加 ignore_index=False 并提前用 fillna() 处理;
  • 扩展性提示:如需添加百分比列,可在 result 后追加 result.div(result.sum(axis=0), axis=1).mul(100).round(1)。

无论选择哪种方式,最终均可直接导出为 Excel 或传入 Seaborn/Matplotlib 进行热力图、堆叠柱状图等可视化,真正实现从原始数据到决策就绪报表的一站式转换。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

53

2025.12.04

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

393

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

574

2023.08.10

excel对比两列数据异同
excel对比两列数据异同

Excel作为数据的小型载体,在日常工作中经常会遇到需要核对两列数据的情况,本专题为大家提供excel对比两列数据异同相关的文章,大家可以免费体验。

1391

2023.07.25

excel重复项筛选标色
excel重复项筛选标色

excel的重复项筛选标色功能使我们能够快速找到和处理数据中的重复值。本专题为大家提供excel重复项筛选标色的相关的文章、下载、课程内容,供大家免费下载体验。

405

2023.07.31

excel复制表格怎么复制出来和原来一样大
excel复制表格怎么复制出来和原来一样大

本专题为大家带来excel复制表格怎么复制出来和原来一样大相关文章,帮助大家解决问题。

561

2023.08.02

excel表格斜线一分为二
excel表格斜线一分为二

在Excel表格中,我们可以使用斜线将单元格一分为二。本专题为大家带来excel表格斜线一分为二怎么弄的相关文章,希望可以帮到大家。

1243

2023.08.02

excel斜线表头一分为二
excel斜线表头一分为二

excel斜线表头一分为二的方法有使用合并单元格功能方法、使用文本框功能方法、使用自定义格式方法。本专题为大家提供excel斜线表头一分为二相关的各种文章、以及下载和课程。

367

2023.08.02

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 12.7万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号