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

如何基于配对索引列表合并Pandas中的df1与df2?

基于配对索引列表合并两个DataFrame

核心思路

通过构造df1行索引与df2行索引的一一配对关系,分别提取两个DataFrame中对应行的副本,再将它们按列拼接,就能实现自定义的合并逻辑。这种方式绕开了Pandas复杂的merge计算,直接基于索引定位行,效率更高。

具体实现步骤

假设你的matches列表格式为[[1,2,7,14], [1,2,7,14], [3,8]],对应df1的第0、1、2行分别需要匹配df2的指定行,代码如下:

  1. 生成索引配对列表
    先把matches转换成(df1行索引, df2行索引)的配对元组列表,明确每一组需要合并的行:

    # 生成索引配对
    index_pairs = []
    for df1_idx, df2_indices in enumerate(matches):
        for df2_idx in df2_indices:
            index_pairs.append( (df1_idx, df2_idx) )
    

    或者用更简洁的列表推导式:

    index_pairs = [ (i, j) for i, js in enumerate(matches) for j in js ]
    
  2. 提取对应行数据
    分别从df1和df2中提取配对列表对应的行:

    import pandas as pd
    
    # 提取df1的重复行(按配对次数复制)
    df1_selected = df1.loc[ [pair[0] for pair in index_pairs] ].reset_index(drop=True)
    # 提取df2的对应行
    df2_selected = df2.loc[ [pair[1] for pair in index_pairs] ].reset_index(drop=True)
    
  3. 合并两个提取后的DataFrame
    直接按列拼接即可得到最终的合并结果:

    merged_df = pd.concat([df1_selected, df2_selected], axis=1)
    

补充说明

  • 这种方法完全基于索引直接定位行,避免了Pandas merge过程中的复杂匹配计算,适合自定义配对逻辑的场景。
  • 如果df1的行索引不是默认的0开始整数,只需把enumerate(matches)换成遍历df1的实际索引:
    index_pairs = [ (df1_idx, df2_idx) for df1_idx, df2_indices in zip(df1.index, matches) for df2_idx in df2_indices ]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:00:15