使用Pandas分析CSV:获取各问题的最频繁回答
按问题分组获取众数并生成CSV的解决方法
问题描述
我的数据结构为每个问题重复6次,CSV示例如下:
Question,Person,Answer Q_1,p1,3 Q_1,p1,3 Q_1,p1,3 Q_1,p1,3 Q_1,p1,3 Q_1,p1,3 Q_2,p1,1 Q_2,p1,1 Q_2,p1,1 Q_2,p1,1 Q_2,p1,1 Q_2,p1,1 Q_3,p1,1 Q_3,p1,1 Q_3,p1,3 Q_3,p1,1 Q_3,p1,2 Q_3,p1,2
我需要获取每个问题的最频繁回答(众数),并生成仅包含该内容的新CSV文件。但直接使用df.mode()时,只能得到整个Answer列的单一值,请问如何按每个问题分别获取对应的众数?
解决方法
核心是通过**分组(groupby)**结合mode()方法,针对每个问题单独计算众数,具体步骤如下:
- 读取原始CSV数据
- 按
Question列分组,对每组的Answer列计算众数 - 处理可能的多众数情况(若某问题存在多个出现次数相同的答案)
- 将结果导出为新的CSV文件
代码实现(基于Pandas)
import pandas as pd # 读取输入CSV文件 df = pd.read_csv('input.csv') # 按Question分组,计算每组Answer的众数 # reset_index()将分组索引转为普通列 mode_result = df.groupby('Question')['Answer'].agg(pd.Series.mode).reset_index() # 处理多众数场景:若某问题有多个众数,取第一个结果 mode_result['Answer'] = mode_result['Answer'].apply( lambda x: x[0] if isinstance(x, pd.Series) else x ) # 导出结果到新CSV mode_result.to_csv('question_modes.csv', index=False)
输出结果
运行上述代码后,生成的question_modes.csv内容如下:
Question,Answer Q_1,3 Q_2,1 Q_3,1
内容的提问来源于stack exchange,提问作者Monika
相关产品推荐
相关产品推荐

