如何在R中处理多索引数据并按分组生成指定汇总行?
解决方案:为每个Case添加汇总行A和B
用Python的pandas库可以轻松实现这个需求,步骤如下:
准备数据
假设你的数据已经读取为pandas的DataFrame,示例代码如下:import pandas as pd # 示例数据(实际替换成你的数据读取逻辑,比如pd.read_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)定义分组处理函数
对每个case分组,生成A、B汇总行并合并到原数据:def add_summary_rows(group): # 生成A行:问题1-3的rater1、rater2求和 row_a = pd.DataFrame({ 'case': [group['case'].iloc[0]], 'question': ['A'], 'rater1': [group[group['question'].isin([1,2,3])]['rater1'].sum()], 'rater2': [group[group['question'].isin([1,2,3])]['rater2'].sum()] }) # 生成B行:问题4-5的rater1、rater2求和 row_b = pd.DataFrame({ 'case': [group['case'].iloc[0]], 'question': ['B'], 'rater1': [group[group['question'].isin([4,5])]['rater1'].sum()], 'rater2': [group[group['question'].isin([4,5])]['rater2'].sum()] }) # 合并原组数据和A、B行 return pd.concat([group, row_a, row_b], ignore_index=True)应用分组函数并整理结果
# 按case分组处理 result_df = df.groupby('case').apply(add_summary_rows).reset_index(drop=True) # 排序确保每个case内原问题在前,A、B在后 result_df['sort_key'] = result_df['question'].apply(lambda x: 0 if isinstance(x, int) else 1 if x == 'A' else 2) result_df = result_df.sort_values(by=['case', 'sort_key']).drop('sort_key', axis=1)查看结果
打印result_df即可得到目标格式,每个case末尾会自动追加A、B两行汇总数据。
内容的提问来源于stack exchange,提问作者miguel
相关产品推荐
相关产品推荐

