首页 > 解决方案 > 如何在 python pandas 中获取唯一的行值并返回布尔结果?

问题描述

我有一个数据框:

Table     A    B    C    
Round     0.2  0    1     
Triangle  3    3    3     
Penta     1    1    1     

我希望得到如下结果:

这意味着如果 A 到 C 列的唯一值仅导致一个值,则返回 false,如果多个返回 true。总之,如果 A 列的值等于 B 且等于 C,则返回 false。

Table     A    B    C    Result
Round     0.2  0    1     True
Triangle  3    3    3     False
Penta     1    1    1     False

有人有想法吗?

标签: pythonpandasdataframe

解决方案


您可以将最后 3 列按最后一列与ne( !=) 不相等进行比较,然后每行添加DataFrame.any检查至少一个:True

print (df)
      Table    A  B  C  Result
0     Round  0.2  0  1    True
1  Triangle  3.0  3  3   False
2     Penta  1.0  1  1   False

df['Result'] = df.iloc[:, -3:].ne(df.iloc[:, -1], axis=0).any(axis=1)
print (df)
      Table    A  B  C  Result
0     Round  0.2  0  1    True
1  Triangle  3.0  3  3   False
2     Penta  1.0  1  1   False

详情

print (df.iloc[:, -3:].ne(df.iloc[:, -1], axis=0))
       A      B      C
0   True   True  False
1  False  False  False
2  False  False  False

如果第一列是索引,则解决方案很简单,并且可以将所有列与任何列进行比较:

df['Result'] = df.ne(df.iloc[:, -1], axis=0).any(axis=1)

print (df)
            A  B  C  Result
Table                      
Round     0.2  0  1    True
Triangle  3.0  3  3   False
Penta     1.0  1  1   False

推荐阅读