Excel两表根据指定值进行一对多合并效果

我有2个excel文件,A文件是订单金额信息,B文件是手续费信息,
两个文件都可以用“Transaction_id”来进行一对多进匹配,达到紫色的效果。

这种效果应该不叫合并,所以感觉不是用merge,不知道这种操作叫什么,看了一下groupby,好像也不是。

img

两个dateframe A先根据这个id使用groupby或者筛选到对应的B数据列,然后合并concat操作。需要代码的话,我给你写。采纳下就行。
最终效果:

img


实现代码:

import pandas as pd

# 读取Excel文件
df_a = pd.read_excel('A.xls',dtype=str)
df_b = pd.read_excel('B.xls',dtype=str)

#
df_result = pd.DataFrame()
for i in range(len(df_a)):

    transaction_id = df_a.iloc[i]['Transaction_id']
    df = df_b[df_b['Transaction_id']==transaction_id] #按transaction_id查找B表的数据
    #合并数据
    #当前行数据
    df_current = df_a.iloc[i].to_frame().T

    #获取Partner_Transaction_id列
    coumn = pd.DataFrame([df.iloc[0]['Partner_Transaction_id']],columns=['Partner_Transaction_id'],index=[i])

    # 增加一列Partner_Transaction_id
    df_current = pd.concat([coumn,df_current],axis=1,)

    df_result = pd.concat([df_result,df_current])
    #增加一行(把B表符合条件的表头作为一行)
    row= pd.DataFrame([df.columns.tolist()],columns=df_result.columns)

    df_result = pd.concat([df_result,row])
    #把B中符合条件的行都添加进来
    for j in range(len(df)):
        row = pd.DataFrame([df.iloc[j].tolist()], columns=df_result.columns)
        df_result = pd.concat([df_result, row],ignore_index=True)

    # 每2个记录之间添加一个空行,为了美观
    row = pd.DataFrame([["" for a in range(len(df_current.columns))]], columns=df_current.columns)
    df_result = pd.concat([df_result, row], ignore_index=True)



# 将结果保存到Excel文件 追加保存
df_result.to_excel('result_ab.xls',index=False)


Excel两表根据指定值进行一对多合并效果 我有2个excel文件,A文件是订单金额信息,B文件是手续费信息, 两个文件都可以用“Transaction_id”来进行一对多进匹配,达到紫色的效果。 这种效果应该不叫合并,所以感觉不是用merge,不知道这种操作叫什么,看了一下groupby,好像也不是。

您可以尝试使用Excel中的VLOOKUP函数将两个文件中的数据进行匹配。

具体步骤如下:

  1. 打开A文件,选中“Transaction_id”所在列,将其设为左侧列;
  2. 打开B文件,选中“Transaction_id”所在列,将其设为右侧列;
  3. 在A文件中新增一列,命名为“手续费”,在第一行输入以下公式:=VLOOKUP(A2, [B文件名.xlsx]Sheet1!$A$2:$B$1000, 2, FALSE);
  4. 将公式拖动至所有行,即可实现根据“Transaction_id”进行匹配,并将手续费信息添加到A文件中。

其中,[B文件名.xlsx]表示B文件的文件名,Sheet1表示B文件中的工作表名,$A$2:$B$1000表示B文件中的“Transaction_id”和手续费所在的区域,2表示需要返回的值所在的列,FALSE表示精确匹配。

希望对您有帮助。

回答不易,求求您采纳点赞哦 感激不尽

在 Python 中,你可以使用 Pandas 库来实现根据指定值进行一对多匹配的操作,具体步骤如下:

1、导入 Pandas 库,并读取订单金额信息文件和手续费信息文件。

import pandas as pd

orders = pd.read_excel('订单金额信息文件.xlsx')
fees = pd.read_excel('手续费信息文件.xlsx')

2、使用 merge 函数,根据 Transaction_id 进行一对多匹配。

result = pd.merge(orders, fees, on='Transaction_id', how='left')

在这里,使用 on 参数指定根据 Transaction_id 进行匹配,使用 how 参数指定合并方式,这里使用左连接 left 表示以订单金额信息文件为主表进行匹配,匹配不到手续费信息则填充 NaN。
3、保存结果到 Excel 文件中。

result.to_excel('匹配结果.xlsx', index=False)

在这里,使用 to_excel 函数将结果保存到 Excel 文件中,其中 index=False 表示不保存行索引。

这样就完成了根据指定值进行一对多匹配的操作,最终结果将保存在匹配结果.xlsx 文件中。注意,在进行 merge 操作时,需要确保两个表格中的 Transaction_id 列都是唯一的,否则可能会出现重复行的情况。


import pandas as pd

# 读取两个Excel文件
df_order = pd.read_excel('A.xlsx')
df_fee = pd.read_excel('B.xlsx')

# 将两个文件根据'Transaction_id'列进行合并
df_merged = pd.merge(df_order, df_fee, on='Transaction_id')

# 输出合并后的结果
print(df_merged)

您可以按照以下步骤在 Excel 中进行两表根据指定值进行一对多合并的操作:

打开 Excel 文件,将要合并的两张表格分别命名为“表1”和“表2”。

打开“表1”,选中需要进行一对多合并的列(例如姓名列),点击“数据”菜单中的“高级筛选”选项,打开高级筛选对话框。

在高级筛选对话框中,选择“将筛选结果复制到其他位置”,在“列表区域”中输入“表2”的数据范围(例如B1:C5),在“条件区域”中输入“表1”中需要进行匹配的列的列头(例如姓名列的列头为“姓名”),然后点击“确定”按钮。

等待 Excel 完成筛选后,你会看到“表2”的数据被复制到了“表1”的下方,同时每一条“表1”中的记录都和“表2”中匹配的记录合并在了一起。

请注意,如果“表1”和“表2”中的数据存在重复记录,合并结果可能会出现重复的情况。在这种情况下,您需要手动去重或修改筛选条件以避免重复。

这种操作通常被称为“关联(join)”,它可以将两个数据集合并在一起,但不会改变原始数据集的结构。在这种情况下,您可以使用“Transaction_id”作为关联键,将两个数据集中的记录关联起来,从而得到您所需的紫色结果。常见的关联方法有内连接(inner join)、左连接(left join)、右连接(right join)和外连接(full outer join),您可以根据您的需要选择不同的方法。在Python中,可以使用pandas库的merge()函数来实现关联操作。
以下是具体操作:

1.打开Excel文件A和B,确保两个文件中都有"Transaction_id"列,并且该列中的值可以进行一对多匹配。

2.选中文件A中的整个表格(或者是需要进行操作的部分表格),复制到剪贴板。

3.在文件B中找到一个空白的单元格,右键单击该单元格,选择“粘贴选项” -> “使用目的地主题匹配格式”。

4.在弹出的“导入数据”对话框中,选择“将数据添加到现有工作表”选项,然后在“位置”字段中选择您要将数据粘贴到的单元格。

5.在“文件A”中选择“Transaction_id”列和“订单金额”列,右键单击这两列中的任意一个,然后选择“复制”。

6.回到“文件B”,在“Transaction_id”列下的第一个空白单元格中,右键单击并选择“粘贴”。

7.如果您正确地选择了“使用目的地主题匹配格式”选项,那么您刚刚粘贴的“Transaction_id”和“订单金额”列将自动匹配到文件B中的“Transaction_id”和“手续费”列。

8重复步骤5-7,直到您已经将所有的需要粘贴的列都完成。

9.保存文件B,这样您的文件B中就已经包含了两个文件的信息匹配后的结果。

请注意,在上述步骤中,如果你的文件A和B不在同一工作簿中,那么你需要在文件B中选择“从其他源导入”选项,并选择要导入的文件A。另外,如果你需要进行多次匹配,那么你可以使用Excel的“宏”功能自动化这个过程,以便更高效地完成工作。

这个在SQL里是inner join,在新版本的excel里有一个power query的插件,可以可视化操作。而且数据源修改之后还可以实时更新。
下图为操作示例(如果熟悉SQL的话直接写了很方便)

img

img

img

img

你可以使用VBA代码实现Excel两表根据指定值进行一对多合并的效果。具体的代码可以参考下面的示例:


Sub MergeTables()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim rng1 As Range
    Dim rng2 As Range
    Dim k As Long
    Dim i As Long
    Dim j As Long
    Dim key As String
    Dim key1 As String
    Dim key2 As String
    Dim result As String
 
    Set ws1 = ThisWorkbook.Sheets("Sheet1")
    Set ws2 = ThisWorkbook.Sheets("Sheet2")
    Set rng1 = ws1.Range("A1").CurrentRegion
    Set rng2 = ws2.Range("A1").CurrentRegion
 
    k = rng1.Rows.Count
    For i = 2 To k
        key1 = rng1.Cells(i, 1).Value
        For j = 2 To rng2.Rows.Count
            key2 = rng2.Cells(j, 1).Value
            If key1 = key2 Then
                result = rng2.Cells(j, 2).Value
                rng1.Cells(i, 2).Value = result
            End If
        Next
    Next
End Sub

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^