如何获取唯一的行值并在python pandas中返回布尔结果?

时间:2018-07-02 04:42:35

标签: python pandas dataframe

我有一个数据框:

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

我希望得到如下结果:

这意味着如果A到C列的唯一值仅产生一个值,则返回false,如果多个返回true,则返回false。总之,如果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

有人有想法吗?

1 个答案:

答案 0 :(得分:3)

您可以按不等于ne!=)的最后一列来比较最后三列,然后添加DataFrame.any来检查每行至少一个True:< / p>

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