如何统计问卷数据集分类值并将统计结果转换为新数据集?
解决方案
你可以通过以下几种方法将统计结果整合为目标格式的数据集:
方法1:基于你的现有循环修改
直接在已有的循环逻辑上扩展,把每个问题的统计结果存入字典,最后转为DataFrame:
import pandas as pd # 假设原始数据已存入test_df question_cols = test_df.columns[1:] # 排除"客户ID(Client_Id)"列 # 初始化字典存储统计结果 stats_data = { 'Yes': [], 'No': [] } for c in question_cols: d = test_df[c].value_counts().reindex(['Yes', 'No'], fill_value=0) stats_data['Yes'].append(d['Yes']) stats_data['No'].append(d['No']) # 转换为目标格式的DataFrame final_df = pd.DataFrame(stats_data, index=['Yes', 'No']).reset_index() final_df.columns = ['回答(Response)'] + list(question_cols)
方法2:用pandas的apply简化代码
无需循环,直接对所有问题列应用统计逻辑,再调整格式:
import pandas as pd question_cols = test_df.columns[1:] # 对每个问题列统计Yes/No数量,转置后调整结构 stats_df = test_df[question_cols].apply( lambda x: x.value_counts().reindex(['Yes', 'No'], fill_value=0) ).T.reset_index() # 转置为目标格式 final_df = stats_df.set_index('index').T.reset_index() final_df.columns = ['回答(Response)'] + list(question_cols)
方法3:用melt+pivot_table实现
通过将宽表转长表,再透视统计的方式生成结果:
import pandas as pd # 将原始宽表转为长表 melted_df = test_df.melt( id_vars='客户ID(Client_Id)', var_name='问题', value_name='回答' ) # 透视统计每个问题的Yes/No数量 final_df = melted_df.pivot_table( index='回答', columns='问题', values='客户ID(Client_Id)', aggfunc='count', fill_value=0 ).reset_index() final_df.columns = ['回答(Response)'] + list(test_df.columns[1:])
运行任意一种方法后,final_df就是你需要的目标格式数据集。
内容的提问来源于stack exchange,提问作者aisaacs9
相关产品推荐
相关产品推荐

