问题背景

在数据处理过程中,常常需要将多个数据表进行合并,并进行比对,以便找出数据的差异和共同之处。本文将介绍如何使用 Pandas 库对两个 Excel 数据表进行合并与比对,并将结果输出到新的 Excel 文件中。

读取数据表

首先,我们使用 Pandas 库中的 read_excel 函数来读取两个 Excel 文件中的数据,分别存储到 left_dfright_df 变量中。

import pandas as pd

left_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\数据核对\\数据1.xlsx')
right_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\数据核对\\数据2.xlsx')

数据表分组求和

接下来,我们对 left_dfright_df 分别按照 '店铺名称' 和 '订单号' 进行分组,并对其他列进行求和操作。

left_df = left_df.groupby(['店铺名称', '订单号'], as_index=False).sum()
right_df = right_df.groupby(['店铺名称', '订单号'], as_index=False).sum()

合并数据表

然后,我们使用 merge 函数将经过分组求和后的两个 DataFrame 进行合并,同时启用标记列以标识每行数据的来源。

merged_df = pd.merge(left_df, right_df, how='outer', on=['订单号', '店铺名称'], indicator=True)

添加标记结果列

根据合并的结果,我们添加一个新列 'merge_result',用于标记每条记录属于左侧有的数据、都有的数据还是右侧有的数据。

conditions = [
(merged_df['_merge'] == 'left_only'), # 左侧有的数据
(merged_df['_merge'] == 'both'), # 左右两边都有的数据
(merged_df['_merge'] == 'right_only') # 右侧有的数据
]
choices = ['Left only', 'Both', 'Right only'] merged_df['merge_result'] = np.select(conditions, choices)

保存结果到 Excel 文件

最后,我们将合并后的结果写入到新的 Excel 文件中,以便进一步分析和分享。

merged_df.to_excel('merged.xlsx', index=False)

总结

通过以上步骤,我们成功地使用 Pandas 完成了两个数据表的合并与比对,并将结果保存到了新的 Excel 文件中。这个过程为我们展示了如何利用 Pandas 库进行数据处理和分析,为日常工作中的数据清洗和整合提供了有力的支持。

完整代码

import pandas as pd
import numpy as np # 读取两个 Excel 文件
left_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\数据核对\\数据1.xlsx')
right_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\数据核对\\数据2.xlsx') # 对 left_df DataFrame 进行分组求和
left_df = left_df.groupby(['店铺名称', '订单号'], as_index=False).sum() # 对 right_df DataFrame 进行分组求和
right_df = right_df.groupby(['店铺名称', '订单号'], as_index=False).sum() # 合并两个数据表,并启用标记列
merged_df = pd.merge(left_df, right_df, how='outer', on=['订单号', '店铺名称'], indicator=True)
# 使用 merge 函数将左右两个 DataFrame 进行合并
# how='outer' 表示执行外连接操作,包括左边有的、都有的和右边有的数据
# on=['订单号', '店铺名称'] 表示合并所依据的关键字列名是 '订单号' 和 '店铺名称'
# indicator=True 表示启用一个标记列 '_merge' 来标记每个行的来源 # 根据标记列的值,添加一个标记结果列
conditions = [
(merged_df['_merge'] == 'left_only'), # 左侧有的数据
(merged_df['_merge'] == 'both'), # 左右两边都有的数据
(merged_df['_merge'] == 'right_only') # 右侧有的数据
]
choices = ['Left only', 'Both', 'Right only']
# 对应上述条件的选择,分别为左侧有的数据、都有的数据、右侧有的数据
merged_df['merge_result'] = np.select(conditions, choices)
# 使用 np.select 函数根据条件和选择,在 DataFrame 中添加一个新列 'merge_result',标记为左侧有的数据、都有的数据或右侧有的数据 # 将结果写入到 Excel 文件中
merged_df.to_excel('merged.xlsx', index=False)
# 将合并后的结果写入到 Excel 文件 'merged.xlsx' 中,不包含索引列

利用Python 去重聚合Excel数据并对比两份数据的差异的更多相关文章

  1. 数据测试001:利用python连接数据库插入excel数据

    数据测试001:利用python连接数据库插入excel数据 最近在做数据测试,主要是做报表系统,需要往数据库插入数据验证服务逻辑,本次介绍如何利用python脚本插入Oracle和Mysql库中: ...

  2. 《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算(一)

    http://www.cnblogs.com/batteryhp/p/5046450.html 对数据进行分组并对各组应用一个函数,是数据分析的重要环节.数据准备好之后,通常的任务就是计算分组统计或生 ...

  3. 利用Python openpyxl操作Excel

    from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = ...

  4. 利用Python sklearn的SVM对AT&T人脸数据进行人脸识别

    要求:使用10-fold交叉验证方法实现SVM的对人脸库识别,列出不同核函数参数对识别结果的影响,要求画对比曲线. 使用Python完成,主要参考文献[4],其中遇到不懂的功能函数一个一个的查官方文档 ...

  5. 详解python操作生成excel表格,并且填充数据

    最近在研究python操作excel表格的问题,首先读取excel表格觉得平时用的多,不怎么有难度,就是pyhon生成excel表格的时候,平时不怎么用,所以重点研究了一下,现总结如下: 1.首先用到 ...

  6. 利用Python进行数据分析(10) pandas基础: 处理缺失数据

      数据不完整在数据分析的过程中很常见. pandas使用浮点值NaN表示浮点和非浮点数组里的缺失数据. pandas使用isnull()和notnull()函数来判断缺失情况. 对于缺失数据一般处理 ...

  7. 《利用Python进行数据分析》笔记---第6章数据加载、存储与文件格式

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  8. python实现处理excel单元格中的数据

    实现代码如下: # 将数据单元格(格式为:参数名=值)里的数据以键值对的形式放入字典中,返回该字典 class get_string: def cut_string(self,string): # 将 ...

  9. 利用Python进行数据分析(9) pandas基础: 汇总统计和计算

    pandas 对象拥有一些常用的数学和统计方法.   例如,sum() 方法,进行列小计:   sum() 方法传入 axis=1 指定为横向汇总,即行小计:   idxmax() 获取最大值对应的索 ...

  10. 利用python进行数据分析之数据聚合和分组运算

    对数据集进行分组并对各分组应用函数是数据分析中的重要环节. group by技术 pandas对象中的数据会根据你所提供的一个或多个键被拆分为多组,拆分操作是在对象的特定轴上执行的,然后将一个函数应用 ...

随机推荐

  1. C# 实现刘谦春晚魔术

    internal class Program { static List<string> list=new List<string>() { "A",&qu ...

  2. ES6学习 第四章 字符串的新增方法

    前言 本章介绍字符串对象的新增方法.不常用的方法不做重点笔记. 本章原文链接:字符串的新增方法 includes().startsWith().endsWith() 确定一个字符串是否包含在另一个字符 ...

  3. SATA 学习笔记——Frame/Primitive解析

    一.故事前传 我们之前说到Link layer的结构,link layer的作用大致可以包括以下几点: Frame flow control CRC的生成与检测(已解析,详细见历史文章) 对数据与控制 ...

  4. logstash4j-用于日志的输入、转换处理、输出, java 开发者自己的 logstash

    项目简介 logstash4j 用于日志的输入.转换处理.输出, java 开发者自己的 logstash 特性 input output filter metric 开源地址 logstash4j ...

  5. Swoole从入门到入土(18)——WebSocket服务器[心跳ping]

    由于 WebSocket 是长连接,如果一定时间内没有通讯,连接可能会断开.这时候需要心跳机制,WebSocket 协议包含了 Ping 和 Pong 两个帧,可以定时发送 Ping 帧来保持长连接. ...

  6. 双哈希_Birthday_Cake

    Birthday Cake 思路:找到每个串的公共前后缀,统计公共前后缀之间的字符串的hash值,并判断所给n个串中是否存在符合条件的串 eg:abbddab 对于该串,我们不难发现,公共前后缀是ab ...

  7. shell 定时清理一定时间内未使用的目录下文件脚本

    配合crontab即可实现标题 使用 bash + 脚本 + 目录 bash xx.sh /root/xx/ 脚本如下: #!/bin/bash # 将current转换为时间戳,精确到秒 CURRE ...

  8. 【Android 抓包对抗】客户端证书和域名校验绕过

    1. 按照之前的方式(https://www.cnblogs.com/gradyblog/p/17197707.html)进行抓包发现证书校验失败 SSL handshake with client ...

  9. SUB-LVDS 与LVDS 互联

    SUB-LVDS 与 LVDS介绍 电气规范 今天有同学问SUB-LVDS输出是否能接到LVDS输入上,以前没用过SUB-LVDS,一起学习一下. Sub-LVDS is a differential ...

  10. Java纯手打web服务器(一)

    目录 在主线程中进行等待客户端请求: 这里主要说下解析流程: 在主线程中进行等待客户端请求: public static void main(String[] args) { HttpServer1 ...