【问题标题】:Python Pandas drop row duplicates on a column if no duplicate on other column如果其他列上没有重复,Python Pandas 会在列上删除行重复
【发布时间】:2022-01-12 01:48:42
【问题描述】:

我有这个带有电子邮件标题的 df。我需要消除 Subject 相同且 Source 不同的所有重复项。我花了几个小时试图找出解决方案或找到类似的案例......

Date From Subject Source
12/06/21 Sender1 Test123 Inbox
12/06/21 Sender2 Confirm Inbox
12/06/21 Sender1 Test123 Sent
12/06/21 Sender3 Test_on Inbox
12/06/21 Sender3 Test_on Inbox

实际上应该从上面的表格中删除 subject = 'Test123' 的行。

Date From Subject Source
12/06/21 Sender2 Confirm Inbox
12/06/21 Sender3 Test_on Inbox
12/06/21 Sender3 Test_on Inbox

【问题讨论】:

  • 类似df[df['Subject'].duplicated(keep=False) & ~df['Source'].duplicated(keep=False)]?

标签: python pandas duplicates drop


【解决方案1】:

您可以使用set 来确定每个发件人是否有多个来源。如果是,请删除该行。

>>> df.loc[df.groupby('From')['Source'].transform(lambda x: len(set(x)) == 1)]

       Date     From  Subject Source
1  12/06/21  Sender2  Confirm  Inbox
3  12/06/21  Sender3  Test_on  Inbox
4  12/06/21  Sender3  Test_on  Inbox

【讨论】:

  • 它可以工作...谢谢 Corralien!
【解决方案2】:
duplicated_subject = df.duplicated('Subject', keep=False)
duplicated_subject_and_source = df.duplicated(['Subject', 'Source'], keep=False)
df[~duplicated_subject | duplicated_subject_and_source]

消除“主题相同且来源不同”的所有重复项

等价于

保留“主题不重复或主题重复且来源相同”的位置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2013-02-05
    • 2017-05-05
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多