你可以使用以下方法来检查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)将True和False值转换为1和0,如下所示:
#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。