Pandas中如何检查多列是否相等(附代码实例)

794 阅读2分钟

你可以使用以下方法来检查pandas中的多列是否相等。

方法1:检查所有列是否相等

df['matching'] = df.eq(df.iloc[:, 0], axis=0).all(1)

方法2:检查特定列是否相等

df['matching'] = df.apply(lambda x: x.col1 == x.col3 == x.col4, axis=1)

下面的例子展示了如何在实践中用以下pandas DataFrame使用每种方法:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'A': [4, 0, 3, 3, 6, 8, 7],
                   'B': [4, 2, 3, 5, 6, 4, 7],
                   'C': [4, 0, 3, 3, 5, 10, 7],
                   'D': [4, 0, 3, 3, 3, 8, 7]})

#view DataFrame
print(df)

   A  B   C  D
0  4  4   4  4
1  0  2   0  0
2  3  3   3  3
3  3  5   3  3
4  6  6   5  3
5  8  4  10  8
6  7  7   7  7

例子1:检查所有列是否相等

我们可以使用下面的语法来检查DataFrame中每一列的值是否与每一行相等:

#create new column that checks if all columns match in each row
df['matching'] = df.eq(df.iloc[:, 0], axis=0).all(1)

#view updated DataFrame
print(df)

   A  B   C  D  matching
0  4  4   4  4      True
1  0  2   0  0     False
2  3  3   3  3      True
3  3  5   3  3     False
4  6  6   5  3     False
5  8  4  10  8     False
6  7  7   7  7      True

如果每一列的值都相等,那么匹配的列就会返回True

否则,它返回False

注意,你可以通过使用astype(int)TrueFalse值转换为10,如下所示:

#create new column that checks if all columns match in each row
df['matching'] = df.eq(df.iloc[:, 0], axis=0).all(1).astype(int)

#view updated DataFrame
print(df)

   A  B   C  D  matching
0  4  4   4  4         1
1  0  2   0  0         0
2  3  3   3  3         1
3  3  5   3  3         0
4  6  6   5  3         0
5  8  4  10  8         0
6  7  7   7  7         1

例2:检查特定列是否相等

我们可以使用下面的语法来检查DataFrame中每一行的A、C、D列的值是否相等:

#create new column that checks if values in columns A, C, and D are equal
df['matching'] = df.apply(lambda x: x.A == x.C == x.D, axis=1)

#view updated DataFrame
print(df)

   A  B   C  D  matching
0  4  4   4  4      True
1  0  2   0  0      True
2  3  3   3  3      True
3  3  5   3  3      True
4  6  6   5  3     False
5  8  4  10  8     False
6  7  7   7  7      True

如果A、C、D列的值相等,那么匹配的列就会返回True

否则,它返回False