删除 pandas 中的重复项。 copy() 和 drop_duplicates() 正在删除只出现一次的行

Remove duplicates in pandas. copy() and drop_duplicates() is removing rows that appear only once

如问题所述。我正在尝试使用 2 series/columns df['Offering Family', 'Major Offering'].

删除 df 中的重复行

我希望根据Major Offering栏目,将后续的df与我已有的df合并,这样只有offering family栏目会转置到新的df中。我应该注意,我只想删除具有在两列中重复的值的行。如果一个值在“产品系列”列中出现多次,但在主要产品列中的值不同,则不应将其删除。但是,当我 运行 下面的代码时,我发现我正在丢失这些类型的值。有人可以帮忙吗?

df = pd.read_excel(pipelineEx, sheet_name='Data')

dfMO = df[['Offering Family', 'Major Offering']].copy()

dfMO.filter(['Offering Family', 'Major Offering'])

dfMO = df.drop_duplicates(subset=None, keep="first", inplace=False)


#dfMO.drop_duplicates(keep=False,inplace=True)
print(dfMO)

dfMO.to_excel("Major Offering.xlsx")

好吧,您分享的代码有一些奇怪之处。

首先,您创建了一个 dfM0 作为 df 的副本,只有两列。但是然后你在 df 上应用 drop_duplicates() 函数,原始数据框,并覆盖你创建的 dfM0。

据我了解,您需要的是数据框来保留可以由两列中的值组成的所有唯一组合。 groupby() 更适合您的目的。

试试这个:

cols = ['Offering Family', 'Major Offering']
dfM0 = df[cols].groupby(cols).count().reset_index()
默认情况下,

reset_index() 会 return 一个副本,因此不需要额外的关键字参数。

我已经更新了你的代码,正如 Aditya Chhabra 提到的,你正在创建一个副本而不是使用它。

df = pd.read_excel(pipelineEx, sheet_name='Data')

dfMO = df[['Offering Family', 'Major Offering']].copy()
dfMO.drop_duplicates(inplace=True)
print(dfMO)

dfMO.to_excel("Major Offering.xlsx")