如何使用Pandas基于指定两列删除Excel导入的DataFrame重复值?
基于两列值删除Pandas DataFrame中的重复项
嘿,看来你已经成功把Excel数据导入到Pandas DataFrame里了,现在要基于两列的值删除重复项对吧?这事儿用Pandas的drop_duplicates()方法就能轻松搞定,刚好你的Pandas 0.22版本完全支持这个功能,我给你详细说说怎么弄:
首先,先把你现有的导入代码格式化好:
# Python 3.5.2 # Pandas库版本0.22 import pandas as pd # 将Excel工作簿保存至变量 current_workbook = pd.ExcelFile('C:\Users\userX\Desktop\cost_values.xlsx') # 将工作簿转换为DataFrame(设置vend_num为索引列) current_worksheet = pd.read_excel(current_workbook, index_col='vend_num') # 打印当前DataFrame print(current_worksheet)
接下来,要实现基于两列去重,只需要调用drop_duplicates()方法,并通过subset参数指定你要用来判断重复的两列名称即可。这里给你几个常用的场景示例:
示例1:保留第一个出现的重复行(默认行为)
假设你要基于vend_number和cost这两列去重,保留每组重复数据中的第一行:
# 生成去重后的新DataFrame(不修改原数据) deduped_df = current_worksheet.drop_duplicates(subset=['vend_number', 'cost'], keep='first') # 打印去重结果 print(deduped_df)
示例2:保留最后一个出现的重复行
如果你想保留每组重复数据中的最后一行,只需要把keep参数改成'last':
deduped_df = current_worksheet.drop_duplicates(subset=['vend_number', 'cost'], keep='last')
示例3:删除所有重复行(无保留)
如果某两行在指定的两列上完全相同,你想把这两行都删掉,就把keep设为False:
deduped_df = current_worksheet.drop_duplicates(subset=['vend_number', 'cost'], keep=False)
示例4:直接修改原DataFrame
如果你不想生成新的DataFrame,而是直接在原数据上修改,加上inplace=True参数即可:
current_worksheet.drop_duplicates(subset=['vend_number', 'cost'], keep='first', inplace=True) print(current_worksheet)
小提示
- 记得把
subset里的列名替换成你实际需要的两列,比如如果是item_code和vendor_id,就改成subset=['item_code', 'vendor_id'] - 你的Pandas 0.22版本完全支持这些参数,不用担心兼容性问题
内容的提问来源于stack exchange,提问作者abautista
相关产品推荐
相关产品推荐

