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(通用稳健)

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

What-the-Diff
What-the-Diff

检查请求差异,自动生成更改描述

下载
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 进行热力图、堆叠柱状图等可视化,真正实现从原始数据到决策就绪报表的一站式转换。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

78

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

32

2026.01.31

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

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

443

2023.07.18

堆和栈区别
堆和栈区别

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

605

2023.08.10

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

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

1453

2023.07.25

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

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

428

2023.07.31

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

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

572

2023.08.02

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

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

1264

2023.08.02

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

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

精品课程

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

共162课时 | 21万人学习

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

共28课时 | 2.6万人学习

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

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