我有一个数据框:
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
有人有想法吗?
答案 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