【问题标题】:Pandas - check if other columns have duplicates based on a different columnPandas - 检查其他列是否有基于不同列的重复项
【发布时间】:2019-04-12 01:37:48
【问题描述】:

我有以下数据框:

| col1 | col2 | col3 | col4 |
|------|------|------|------|
| a    | 1    | 2    | abc  |
| b    | 1    | 2    | abc  |
| c    | 3    | 2    | def  |

对于 col1 的唯一值,我想要基于 col2、col3、col4 重复的行。

在这种情况下,输出将是:

| col1 | col2 | col3 | col4 |
|------|------|------|------|
| a    | 1    | 2    | abc  |
| b    | 1    | 2    | abc  |

df.duplicated 不包括 col1 将不起作用,因为我需要 col1 信息包含在结果中。我有数百万行,如果没有这些直接信息,将很难进行进一步的分析。我不能将 col1 设置为索引,因为需要将其他一些值设置为索引。

是否有 pythonic/pandaic 方法来实现这一点?

【问题讨论】:

  • 不确定我是否理解col1 的作用。如果col1a 对于两行,您是否不想要这些行?
  • @busybear 没有。我不希望它们用于 col1 的非唯一值。

标签: python pandas


【解决方案1】:

我们可以使用 groupby:

df[df.groupby(['col2','col3','col4']).col1.transform(len) > 1]

【讨论】:

    【解决方案2】:
    df = pd.DataFrame({'col1': ['a','b','c'],
                      'col2':[1,1,3],
                      'col3': [2,2,2],
                      'col4':['abc','abc', 'def']})
    
    df[df.duplicated(subset = ['col2', 'col3', 'col4'], keep = False)]
    
    df
        col1    col2    col3    col4
    0    a       1        2      abc
    1    b       1        2      abc
    

    df.duplicated 在您的数据框中查找重复的行。 Subset 查找您要检查的特定列,keep = False 显示两行。如果您只想查看其中一个重复的行,只需将其删除即可。

    【讨论】:

      【解决方案3】:

      我们可以使用filter

      df.groupby(['col2','col3','col4']).filter(lambda x : (x['col1'].nunique()==x['col1'].count())&(x['col1'].nunique()>1))
      Out[65]: 
        col1  col2  col3 col4
      0    a     1     2  abc
      1    b     1     2  abc
      

      还有duplicated,第一次重复确保你有重复的值行,第二次确保你没有只有一行

      df[df.duplicated(['col2','col3','col4'],keep=False)&~df.duplicated(['col1','col2','col3','col4'],keep=False)]
      Out[70]: 
        col1  col2  col3 col4
      0    a     1     2  abc
      1    b     1     2  abc
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-03
        • 1970-01-01
        • 2019-10-09
        • 2021-12-30
        • 1970-01-01
        相关资源
        最近更新 更多