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

如何通过循环实现多组DataFrame列表的递减式左合并?

问题:按指定逻辑循环合并两组DataFrame列表

给定的DataFrame定义

import pandas as pd

df1 = pd.DataFrame({"Id":[101,102,103,104],"Name":["Harish","Hari","Harry",""],"Age":[30,31,32,33],"Mobile":[1,2,3,3]},index=[0,1,2,3])
df2 = pd.DataFrame({"Id":[101,102,103,104],"Name":["Harish","Hari","Harry",""],"Age":[30,31,32,33],"Mobile":[1,2,3,3]},index=[0,1,2,3])
df3 = pd.DataFrame({"Id":[101,102,103,104],"Name":["Harish","Hari","Harry",""],"Age":[30,31,32,33],"Mobile":[1,2,3,3]},index=[0,1,2,3])

df4 = pd.DataFrame({"Id":[101,102,103,104],"ename":["Harish","Hari","Harry",""],"pg":[30,31,32,33],"M+":[1,2,3,3]},index=[0,1,2,3])
df5 = pd.DataFrame({"Id":[101,102,103,104],"en":["Harish","Hari","Harry",""],"pg+":[30,31,32,33],"Tm":[1,2,3,3]},index=[0,1,2,3])
df6 = pd.DataFrame({"Id":[101,102,103,104],"years":["2016","2018","2019",""],"lev":[30,31,32,33],"d+":[1,2,3,3]},index=[0,1,2,3])

data_frames1 = [df1,df2,df3]
data_frames2 = [df4,df5,df6]

尝试的错误代码

check1 = []
test = []
for i in range(len(data_frames1)):
    for j in range(len(data_frames2)):
        # merge_dfs = pd.merge(data_frames1[i],data_frames2[j],on="Id",how="left")
        if len(test) <= 0:
            test.append(data_frames1[i])
        else:
            fin = test[-1].merge(data_frames2[j],how='left',on='Id')
            test.append(fin)

期望的合并逻辑

  • 第一组第一个DataFrame依次合并第二组所有DataFrame:
    m1 = df1.merge(df4,how="left",on="Id")
    m2 = m1.merge(df5,how="left",on="Id")
    m3 = m2.merge(df6,how="left",on="Id")
    
  • 第一组第二个DataFrame依次合并第二组从第二个开始的DataFrame:
    m4 = df2.merge(df5,how="left",on="Id")
    m5 = m4.merge(df6,how="left",on="Id")
    
  • 第一组第三个DataFrame仅合并第二组最后一个DataFrame:
    m6 = df3.merge(df6,how="left",on="Id")
    

正确的循环实现代码

final_dfs = []

# 遍历第一组的每个DataFrame,同时记录索引
for idx, base_df in enumerate(data_frames1):
    current_df = base_df.copy()
    # 从第二组的第idx个元素开始,依次合并
    for merge_df in data_frames2[idx:]:
        current_df = current_df.merge(merge_df, how='left', on='Id')
    final_dfs.append(current_df)

# 结果验证:final_dfs[0]对应m3,final_dfs[1]对应m5,final_dfs[2]对应m6

代码逻辑说明

  • 使用enumerate遍历data_frames1,同时获取每个DataFrame的索引idx,这个索引决定了从data_frames2的哪个位置开始合并
  • 对每个基础DataFrame,先复制一份避免修改原数据,然后依次合并data_frames2中从idx到末尾的所有DataFrame
  • 最终final_dfs列表中的元素依次对应你期望的三个合并结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:28:11