【问题标题】:Remove duplicates in pandas. copy() and drop_duplicates() is removing rows that appear only once删除 pandas 中的重复项。 copy() 和 drop_duplicates() 正在删除只出现一次的行
【发布时间】:2021-05-19 16:55:34
【问题描述】:

正如问题所述。我正在尝试使用 2 个系列/列 df['Offering Family', 'Major Offering'] 删除 df 中的重复行。

我希望将后续的 df 与我基于主要产品列的另一个合并,因此只有产品系列列将被转置到新的 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")

【问题讨论】:

标签: python python-3.x pandas duplicates data-science


【解决方案1】:

我已经更新了你的代码,正如 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")

【讨论】:

    【解决方案2】:

    嗯,您共享的代码有一些奇怪的地方。

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

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

    试试这个:

    cols = ['Offering Family', 'Major Offering']
    dfM0 = df[cols].groupby(cols).count().reset_index()
    

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

    【讨论】:

    • 我喜欢你的方法,虽然解决方案对用户来说可能有点先进。
    • @AgyeyArya 我想为了用户的利益可以拆分单行代码。但我仍然支持groupby 方法。
    • 只使用 drop_duplicates(inplace=True) 怎么样。我想知道为什么您更喜欢 group_by.count().reset_index() 而不是更简单的解决方案。会不会更复杂(时间和内存方面)
    猜你喜欢
    • 2014-12-14
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2020-12-18
    • 2022-11-22
    • 2016-10-11
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多