【问题标题】:Find rows having same values in multiple columns(Not All Columns) in Pandas Dataframe在 Pandas Dataframe 中查找多列(不是所有列)中具有相同值的行
【发布时间】:2019-12-17 19:15:20
【问题描述】:

下面是我的数据框:

X1  X2  X3  X4  X5
A   B   C   10  BAM
A   A   A   12  BAM
B   B   B   10  BAM
A   B   B   60  BAM

我想要那些在columns(X1, X2,X3) 中有same values 的行。在这里,我们可以看到 2nd3rd 行在以上 3 列中具有相同的值。 我想要的输出是:

 X1 X2  X3  X4  X5
A   A   A   12  BAM
B   B   B   10  BAM

我尝试如下:

yourdf1=df[df.nunique(0)==0]
print(yourdf1)

但是在这里我遇到了一个错误。谁能帮帮我。

【问题讨论】:

  • 不,它不是重复的。我们得到的行在所有列中具有相同的值。但在这里我只想要特定的几列。
  • 没关系。选择列是一个微不足道的步骤,不值得争论结束。

标签: python pandas dataframe


【解决方案1】:

选择列表中的列以通过axis=1DataFrame.nunique 中测试每行唯一值的数量并测试1 以通过boolean indexing 进行过滤:

yourdf1 = df[df[['X1','X2','X3']].nunique(axis=1) == 1]
print(yourdf1)
  X1 X2 X3  X4   X5
1  A  A  A  12  BAM
2  B  B  B  10  BAM

另一种解决方案是使用DataFrame.eq 和过滤DataFrame,按第一列进行比较,并通过DataFrame.all 获得每行的所有True:

df1 = df[['X1','X2','X3']]
yourdf1 = df[df1.eq(df1.iloc[:, 0], axis=0).all(axis=1)]
print(yourdf1)

  X1 X2 X3  X4   X5
1  A  A  A  12  BAM
2  B  B  B  10  BAM

【讨论】:

    【解决方案2】:

    试试

    yourdf = df[~df.duplicated(subset=['X1','X2','X3'])]
    

    【讨论】:

      【解决方案3】:

      请看附件

      df[df[['X1','X2','X3']].duplicated(keep=False)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-18
        • 2019-05-31
        • 1970-01-01
        • 2022-12-17
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多