利用Python 去重聚合Excel数据并对比两份数据的差异

发布时间 2023-09-26 20:50:04作者: qwerrt9

需求描述: 现在有两份Excel数据 数据结构一致 需要根据订单号和店铺名称去重聚合之后,再把两份数据合并对比差异,需要对比出两份数据的差异

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' 中,不包含索引列