如何在R中处理多索引数据集并生成自定义汇总行?
用Pandas实现案例内的汇总行插入
核心思路
按case字段分组,对每个案例单独计算3个汇总问题的得分,将汇总行拼接到原案例数据末尾,最后合并所有案例的结果即可。
具体实现代码
import pandas as pd # 替换为你的实际数据读取方式,比如pd.read_csv("your_data.csv") data = { 'case': [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3], 'question': [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5], 'rater1': [1,1,1,1,0,0,1,1,1,0,0,1,1,1,0], 'rater2': [1,0,1,1,0,1,1,1,0,0,0,0,1,1,1] } df = pd.DataFrame(data) # 处理单个案例分组的函数 def process_single_case(group): case_id = group['case'].iloc[0] # 生成question6的汇总行:问题1-3得分求和 q6 = pd.DataFrame({ 'case': [case_id], 'question': [6], 'rater1': group[group['question'].isin([1,2,3])]['rater1'].sum(), 'rater2': group[group['question'].isin([1,2,3])]['rater2'].sum() }) # 生成question7的汇总行:问题4-5得分求和 q7 = pd.DataFrame({ 'case': [case_id], 'question': [7], 'rater1': group[group['question'].isin([4,5])]['rater1'].sum(), 'rater2': group[group['question'].isin([4,5])]['rater2'].sum() }) # 生成question8的汇总行:问题1-5得分求和 q8 = pd.DataFrame({ 'case': [case_id], 'question': [8], 'rater1': group['rater1'].sum(), 'rater2': group['rater2'].sum() }) # 拼接原数据与汇总行 return pd.concat([group, q6, q7, q8], ignore_index=True) # 分组处理并合并结果 final_df = df.groupby('case', group_keys=False).apply(process_single_case) # 输出结果(可替换为保存到文件:final_df.to_csv("result.csv", index=False)) print(final_df.to_string(index=False))
代码说明
groupby('case', group_keys=False):按案例分组,避免分组键干扰最终结果的结构process_single_case:针对每个案例,精准筛选对应问题的得分进行求和,生成指定格式的汇总行pd.concat:将原案例数据与3个汇总行合并,保证每个案例的原始数据后紧跟汇总内容
内容的提问来源于stack exchange,提问作者miguel
相关产品推荐
相关产品推荐

