Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查多列的值是否相同(python)_Python_Pandas_Similarity - Fatal编程技术网

检查多列的值是否相同(python)

检查多列的值是否相同(python),python,pandas,similarity,Python,Pandas,Similarity,我有一个二进制数据帧,我想检查特定行中的所有值是否都为1。比如我有 下面是数据帧。因为第0行和第2行在col1到col3中都包含值1,所以结果应该是1,如果不是,则应该是0 import pandas as pd d = {'col1': [1, 0,1,0], 'col2': [1, 0,1, 1], 'col3': [1,0,1,1], 'outcome': [1,0,1,0]} df = pd.DataFrame(data=d) 由于我自己的数据帧要大得多,我正在寻找一种比下面更优雅的方

我有一个二进制数据帧,我想检查特定行中的所有值是否都为1。比如我有 下面是数据帧。因为第0行和第2行在col1到col3中都包含值1,所以结果应该是1,如果不是,则应该是0

import pandas as pd
d = {'col1': [1, 0,1,0], 'col2': [1, 0,1, 1], 'col3': [1,0,1,1], 'outcome': [1,0,1,0]}
df = pd.DataFrame(data=d)
由于我自己的数据帧要大得多,我正在寻找一种比下面更优雅的方式,有什么想法吗

def similar(x):
    if x['col1'] == 1 and x['col2'] == 1 and x['col3'] == 1:
        return 1
    else:
        ''
df['outcome'] = df.apply(similar, axis=1)
请尝试以下方法:

df['outcome'] = df.apply(lambda x: 1 if df['col1']==1 and df['col2']==1 and df['col3']==1 else '', axis=1)

all
的经典案例

(iloc的
iloc
只是用来忽略您当前的结果列,如果您没有它,您可以使用
df==1


这更通用,也适用于任何其他值。只需将第二个
==1
替换为
=


如果我有一个不同的值,那么我的列中有1。字符串或bool?
True
False
在Python中等同于1和0,因此bool不是问题。如果您有字符串,可以将其转换为int(使用
astype
)`
df['outcome'] = (df.iloc[:,:-1] == 1).all(1).astype(int) 


    col1    col2    col3    outcome
0   1        1      1           1
1   0        0      0           0
2   1        1      1           1
3   0        1      1           0
df['outcome'] = 0
df.loc[df.loc[(df.iloc[:,:-1].nunique(axis=1) == 1) \
    & (df.iloc[:,:-1] == 1).all(axis=1)].index, 'outcome'] = 1