You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中处理多索引数据并按分组生成指定汇总行?

解决方案:为每个Case添加汇总行A和B

用Python的pandas库可以轻松实现这个需求,步骤如下:

  1. 准备数据
    假设你的数据已经读取为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)
    
  2. 定义分组处理函数
    对每个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)
    
  3. 应用分组函数并整理结果

    # 按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)
    
  4. 查看结果
    打印result_df即可得到目标格式,每个case末尾会自动追加A、B两行汇总数据。


内容的提问来源于stack exchange,提问作者miguel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:50:43