python编程——A、B两个Excel表,数据根据指定值存在一对多的关系,将数据的关系找出来并合并两个表的数据

python编程题目

A、B两个Excel表,数据根据指定值存在一对多的关系,将数据的关系找出来并合并两个表的数据:

A表的数据格式如下:

B表的数据格式如下:

其中,这两个表中有相同的属性Transaction_id并且A表的记录和B表的记录存在一对多的关系,实现根据Transaction_id的值将两者数据合并,并同时保留各自的表头信息。

python编程实现思路:

1)AB表都是Excel表,很容易联想到python中的pandas库中的dateframe数据结构,处理Excel表很方便;

2)既然有相同的属性值,那么我们可以通过A表中的Transaction_id来筛选B中的数据;

3)将A中的数据和根据Transaction_id筛选出来的B中的数据行进行拼接,可以使用pandas中的concat方法

4)要保留各自的表头,所以不能直接concat,而是把B的表格的头部信息当做一行数据来处理,这里很重要,不然直接concat的话,如果表头不一样,效果就不是我们想要的。

python实现代码:

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)

最终的效果:

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光宅男xxb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值