利用Python實(shí)現(xiàn)去重聚合Excel數(shù)據(jù)并對(duì)比兩份數(shù)據(jù)的差異
問題背景
在數(shù)據(jù)處理過程中,常常需要將多個(gè)數(shù)據(jù)表進(jìn)行合并,并進(jìn)行比對(duì),以便找出數(shù)據(jù)的差異和共同之處。本文將介紹如何使用 Pandas 庫(kù)對(duì)兩個(gè) Excel 數(shù)據(jù)表進(jìn)行合并與比對(duì),并將結(jié)果輸出到新的 Excel 文件中。
讀取數(shù)據(jù)表
首先,我們使用 Pandas 庫(kù)中的 read_excel
函數(shù)來讀取兩個(gè) Excel 文件中的數(shù)據(jù),分別存儲(chǔ)到 left_df
和 right_df
變量中。
import pandas as pd left_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\數(shù)據(jù)核對(duì)\\數(shù)據(jù)1.xlsx') right_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\數(shù)據(jù)核對(duì)\\數(shù)據(jù)2.xlsx')
數(shù)據(jù)表分組求和
接下來,我們對(duì) left_df
和 right_df
分別按照 '店鋪名稱' 和 '訂單號(hào)' 進(jìn)行分組,并對(duì)其他列進(jìn)行求和操作。
left_df = left_df.groupby(['店鋪名稱', '訂單號(hào)'], as_index=False).sum() right_df = right_df.groupby(['店鋪名稱', '訂單號(hào)'], as_index=False).sum()
合并數(shù)據(jù)表
然后,我們使用 merge
函數(shù)將經(jīng)過分組求和后的兩個(gè) DataFrame 進(jìn)行合并,同時(shí)啟用標(biāo)記列以標(biāo)識(shí)每行數(shù)據(jù)的來源。
merged_df = pd.merge(left_df, right_df, how='outer', on=['訂單號(hào)', '店鋪名稱'], indicator=True)
添加標(biāo)記結(jié)果列
根據(jù)合并的結(jié)果,我們添加一個(gè)新列 'merge_result',用于標(biāo)記每條記錄屬于左側(cè)有的數(shù)據(jù)、都有的數(shù)據(jù)還是右側(cè)有的數(shù)據(jù)。
conditions = [ (merged_df['_merge'] == 'left_only'), # 左側(cè)有的數(shù)據(jù) (merged_df['_merge'] == 'both'), # 左右兩邊都有的數(shù)據(jù) (merged_df['_merge'] == 'right_only') # 右側(cè)有的數(shù)據(jù) ] choices = ['Left only', 'Both', 'Right only'] merged_df['merge_result'] = np.select(conditions, choices)
保存結(jié)果到 Excel 文件
最后,我們將合并后的結(jié)果寫入到新的 Excel 文件中,以便進(jìn)一步分析和分享。
merged_df.to_excel('merged.xlsx', index=False)
總結(jié)
通過以上步驟,我們成功地使用 Pandas 完成了兩個(gè)數(shù)據(jù)表的合并與比對(duì),并將結(jié)果保存到了新的 Excel 文件中。這個(gè)過程為我們展示了如何利用 Pandas 庫(kù)進(jìn)行數(shù)據(jù)處理和分析,為日常工作中的數(shù)據(jù)清洗和整合提供了有力的支持。
完整代碼
import pandas as pd import numpy as np # 讀取兩個(gè) Excel 文件 left_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\數(shù)據(jù)核對(duì)\\數(shù)據(jù)1.xlsx') right_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\數(shù)據(jù)核對(duì)\\數(shù)據(jù)2.xlsx') # 對(duì) left_df DataFrame 進(jìn)行分組求和 left_df = left_df.groupby(['店鋪名稱', '訂單號(hào)'], as_index=False).sum() # 對(duì) right_df DataFrame 進(jìn)行分組求和 right_df = right_df.groupby(['店鋪名稱', '訂單號(hào)'], as_index=False).sum() # 合并兩個(gè)數(shù)據(jù)表,并啟用標(biāo)記列 merged_df = pd.merge(left_df, right_df, how='outer', on=['訂單號(hào)', '店鋪名稱'], indicator=True) # 使用 merge 函數(shù)將左右兩個(gè) DataFrame 進(jìn)行合并 # how='outer' 表示執(zhí)行外連接操作,包括左邊有的、都有的和右邊有的數(shù)據(jù) # on=['訂單號(hào)', '店鋪名稱'] 表示合并所依據(jù)的關(guān)鍵字列名是 '訂單號(hào)' 和 '店鋪名稱' # indicator=True 表示啟用一個(gè)標(biāo)記列 '_merge' 來標(biāo)記每個(gè)行的來源 # 根據(jù)標(biāo)記列的值,添加一個(gè)標(biāo)記結(jié)果列 conditions = [ (merged_df['_merge'] == 'left_only'), # 左側(cè)有的數(shù)據(jù) (merged_df['_merge'] == 'both'), # 左右兩邊都有的數(shù)據(jù) (merged_df['_merge'] == 'right_only') # 右側(cè)有的數(shù)據(jù) ] choices = ['Left only', 'Both', 'Right only'] # 對(duì)應(yīng)上述條件的選擇,分別為左側(cè)有的數(shù)據(jù)、都有的數(shù)據(jù)、右側(cè)有的數(shù)據(jù) merged_df['merge_result'] = np.select(conditions, choices) # 使用 np.select 函數(shù)根據(jù)條件和選擇,在 DataFrame 中添加一個(gè)新列 'merge_result',標(biāo)記為左側(cè)有的數(shù)據(jù)、都有的數(shù)據(jù)或右側(cè)有的數(shù)據(jù) # 將結(jié)果寫入到 Excel 文件中 merged_df.to_excel('merged.xlsx', index=False) # 將合并后的結(jié)果寫入到 Excel 文件 'merged.xlsx' 中,不包含索引列
以上就是利用Python實(shí)現(xiàn)去重聚合Excel數(shù)據(jù)并對(duì)比兩份數(shù)據(jù)的差異的詳細(xì)內(nèi)容,更多關(guān)于Python對(duì)比Excel數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pycharm配置anaconda環(huán)境時(shí)找不到python.exe解決辦法
今天來說一下python中一個(gè)管理包很好用的工具anaconda,可以輕松實(shí)現(xiàn)python中各種包的管理,這篇文章主要給大家介紹了關(guān)于pycharm配置anaconda環(huán)境時(shí)找不到python.exe的解決辦法,需要的朋友可以參考下2023-10-10python實(shí)現(xiàn)去除空格及tab換行符的方法
這篇文章主要為大家介紹了python實(shí)現(xiàn)去除空格及tab換行符的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python基于多線程實(shí)現(xiàn)抓取數(shù)據(jù)存入數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Python基于多線程實(shí)現(xiàn)抓取數(shù)據(jù)存入數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了Python使用數(shù)據(jù)庫(kù)類與多線程類進(jìn)行數(shù)據(jù)抓取與寫入數(shù)據(jù)庫(kù)操作的具體使用技巧,需要的朋友可以參考下2018-06-06使用Python制作新型冠狀病毒實(shí)時(shí)疫情圖
最近被新型冠狀病毒搞的人心惶惶,很多城市被病毒感染,今天小編給大家分享使用Python制作新型冠狀病毒實(shí)時(shí)疫情圖,感興趣的朋友跟隨小編一起看看吧2020-01-01Python操作Mysql實(shí)例代碼教程在線版(查詢手冊(cè))
本文介紹了Python操作MYSQL、執(zhí)行SQL語句、獲取結(jié)果集、遍歷結(jié)果集、取得某個(gè)字段、獲取表字段名、將圖片插入數(shù)據(jù)庫(kù)、執(zhí)行事務(wù)等各種代碼實(shí)例和詳細(xì)介紹,代碼居多,是一桌豐盛唯美的代碼大餐2013-02-02python3 實(shí)現(xiàn)函數(shù)寫文件路徑的正確方法
今天小編就為大家分享一篇python3 實(shí)現(xiàn)函數(shù)寫文件路徑的正確方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11