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

如何一次性向MultiIndex DataFrame中添加多行数据?

高效批量添加MultiIndex DataFrame行数据的方法

核心思路:批量构造新数据块后合并,替代循环赋值

循环逐个添加的问题在于,每次df.loc赋值都会触发DataFrame的副本创建,数据量越大性能损耗越严重。正确做法是一次性构造所有待添加的行数据,通过合并操作完成批量插入,彻底避免多次副本开销。

具体实现步骤

  1. 构造与原数据结构一致的新数据块:
    针对s3的t1试验、事件序列events = [5,6,7],我们先生成对应MultiIndex的元组,再创建独立的DataFrame:

    import pandas as pd
    
    # 原数据(用户提供)
    tuples = [
        ('s1', 't1', 0, 1, 11), ('s1', 't2', 0, 4, 14), ('s1', 't2', 1, 5, 15), ('s2', 't1', 0, 6, 16),
        ('s2', 't1', 1, 7, 17), ('s2', 't2', 0, 8, 18), ('s2', 't3', 0, 9, 19),
    ]
    df = pd.DataFrame.from_records(tuples, index=['subject', 'trial', 'event'],
                                  columns=['subject', 'trial', 'event', 'A', 'B'])
    
    # 待添加的新数据
    events = [5,6,7]
    target_subject = 's3'
    target_trial = 't1'
    
    # 生成新数据的元组列表(B列暂设为None,后续可补充)
    new_data_tuples = [(target_subject, target_trial, idx, val, None) for idx, val in enumerate(events)]
    # 创建新DataFrame,保持与原数据一致的索引层级和列结构
    new_df = pd.DataFrame.from_records(new_data_tuples, index=['subject', 'trial', 'event'],
                                      columns=['subject', 'trial', 'event', 'A', 'B'])
    
    # 合并原DataFrame与新DataFrame
    df = pd.concat([df, new_df])
    # 可选:排序索引,维持原有层级顺序
    df = df.sort_index()
    print(df)
    
  2. 输出结果:

    A     B
    subject trial event       
    s1      t1    0      1  11.0
            t2    0      4  14.0
                  1      5  15.0
    s2      t1    0      6  16.0
                  1      7  17.0
            t2    0      8  18.0
            t3    0      9  19.0
    s3      t1    0      5   NaN
                  1      6   NaN
                  2      7   NaN
    

后续补充与扩展

  • 若后续获取到s3的t1试验中B列的数据,可直接通过已存在的索引批量赋值(此时不会触发KeyError):
    b_events = [25,26,27]
    df.loc[('s3', 't1', slice(None)), 'B'] = b_events
    
  • 这种合并方式能完美保留MultiIndex的层级结构,方便后续做子集对比分析,比如用df.xs('s1', level='subject')筛选单个受试者数据,或用df.loc[('s1', 't1'), :]定位特定试验的A、B数据做对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:17:10