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

基于参考DataFrame合并Python字典中的DataFrame

问题描述

我有一个名为frames1的DataFrame字典,其键为:

dict_keys(['TableA','TableB','TableC','TableD'])

同时有一个master DataFrame指定合并规则,如下表所示:

Gold TableSilver Table 1Silver Table 2Join TypeLeft_AttrRight_Attr
SystemTable ATable BleftIDapplic_id
SystemTable CTable Arightfamfamid
SystemTable ATable DleftNameIDname

最终的System表需要按行依次合并:先将Table A与Table B按指定属性左连接,结果作为新的Table A参与Table C与Table A的右连接,再将该结果作为新的Table A与Table D左连接。

我尝试的代码如下:

for i in range(len(master)):
     System = pd.merge(frames1[master.iloc[i,1]],frames1[master.iloc[i,2]], how=master.iloc[i,3], on_left= master.iloc[i,4],on_right=master.iloc[i,5])

但该代码每次循环都会覆盖结果,仅得到单次合并的结果。请问如何编写循环实现逐步合并?


解决方案

你的问题核心是每次循环都直接重新赋值System,没有把上一次的合并结果作为下一次合并的输入,另外还要注意master里的表名带空格(比如Table A),但frames1的键是不带空格的TableA,需要先做替换处理。

可以按以下步骤实现逐步合并:

  • 先初始化合并结果,同时更新frames1中的TableA为每次合并后的结果,因为后续步骤都需要用这个新的TableA参与合并。
  • 循环遍历master的每一行,按规则执行合并并更新TableA。

示例代码如下:

import pandas as pd

# 处理master中的表名空格,匹配frames1的键格式
master['Silver Table 1'] = master['Silver Table 1'].str.replace(' ', '')
master['Silver Table 2'] = master['Silver Table 2'].str.replace(' ', '')

# 执行第一次合并:TableA与TableB左连接
current_df = pd.merge(
    frames1[master.iloc[0, 1]],
    frames1[master.iloc[0, 2]],
    how=master.iloc[0, 3],
    left_on=master.iloc[0, 4],
    right_on=master.iloc[0, 5]
)
# 更新frames1的TableA为第一次合并结果
frames1['TableA'] = current_df

# 遍历剩余的合并步骤
for i in range(1, len(master)):
    # 提取当前行的合并规则
    left_tab = master.iloc[i, 1]
    right_tab = master.iloc[i, 2]
    join_mode = master.iloc[i, 3]
    left_col = master.iloc[i, 4]
    right_col = master.iloc[i, 5]
    
    # 执行合并,使用最新的TableA
    current_df = pd.merge(
        frames1[left_tab],
        frames1[right_tab],
        how=join_mode,
        left_on=left_col,
        right_on=right_col
    )
    # 更新TableA为当前合并结果,供下一次使用
    frames1['TableA'] = current_df

# 最终的System表即为current_df
System = current_df

关键说明

  1. 表名匹配:通过str.replace(' ', '')把master里的Table A转为TableA,确保能正确从frames1中取出对应DataFrame。
  2. 结果累积:每次合并后更新frames1中的TableA,这样后续循环里用到TableA时,都是上一次合并后的最新结果,不会被覆盖。
  3. 分步执行:第一次合并单独初始化结果,后续循环处理剩余步骤,逻辑清晰且符合需求中的合并顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:00:16