如何通过循环实现多组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
相关产品推荐
相关产品推荐

