如何用Python for循环批量执行函数生成调研题统计透视表
问卷多题批量透视统计实现方案
核心逻辑是把你已写好的单题统计逻辑封装为参数化函数,循环遍历所有问题列批量生成结果,完全兼容你原有计算规则,不需要重构核心代码。
具体实现
- 把单题计算逻辑中硬编码的题名列替换为函数入参,同时调整列名层级匹配预期输出格式
- 手动指定或通过规则自动筛选需要统计的问题列范围
- 循环调用函数逐题生成结果,按格式打印输出
完整可运行代码如下:
import pandas as pd def generate_single_q_stats(input_df, q_column_name): # 完全复用原有pivot_table计数逻辑 pivot_count = input_df.pivot_table( index=q_column_name, columns='Gender', values='ID', aggfunc='count', fill_value=0 ) # 计算答题占比 pivot_pct = pivot_count.div(pivot_count.sum(axis=1), axis=0).mul(100) # 合并计数、占比数据,匹配#Res(人数)、%Rep(占比)的输出结构 final_table = pd.concat( [pivot_count, pivot_pct], axis=1, keys=['#Res', '%Rep'] ) final_table.index.name = q_column_name return final_table # 要统计的问题列列表,题量多的时候可以用规则自动生成,不用手动枚举: # q_list = [col for col in df.columns if col.startswith('Q')] q_list = ['Q1', 'Q2', 'Q3'] # 逐题生成结果并打印 for q in q_list: print(generate_single_q_stats(df, q)) print('\n')
效果说明
运行后输出格式和预期完全一致:每道题单独成块,分别展示不同性别分组下的答题人数、答题占比,题块之间用空行分隔。如果后续新增问题,只需要把问题列名加入q_list即可,不需要修改统计逻辑。
内容的提问来源于stack exchange,提问作者Sandy
相关产品推荐
相关产品推荐

