在Pandas Dataframe中查找具有多个列(不是全部列)相同值的行

5

以下是我的数据帧:

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

我需要那些在X1, X2, X3列中具有相同值的行。在这里,我们可以看到上述三列中的第二行第三行具有相同的值。我的期望输出是:

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

我尝试了以下方法:

我像下面这样尝试:

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

但是我在这里遇到了一个错误。请问有人可以帮我吗?

不,这不是重复的问题。在那里,我们得到了所有列中具有相同值的行。但是在这里,我只想针对特定的几列。 - ssp
没关系。选择列是一个微不足道的步骤,不值得为此争论闭包。 - cs95
4个回答

11

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

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来使用DataFrame.eq,通过第一列进行比较,并通过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

0
请查看附件。
df[df[['X1','X2','X3']].duplicated(keep=False)]

0

尝试一下

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

0
你可以遍历每一行,并将列进行比较,将相同的行附加到一个新的数据框中。 代码大致如下:
df2 = pd.DataFrame()
for row in df.rows:
    if (row['X1'] == row['X2']  and row['X2'] == row['X3']):
       df2.append(row)
display(df2)
     

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接