2
votes

Vérifiez si les valeurs de plusieurs colonnes sont identiques (python)

J'ai un dataframe binairy et je voudrais vérifier si toutes les valeurs d'une ligne spécifique ont la valeur 1. Par exemple, j'ai sous le dataframe. Puisque la ligne 0 et la ligne 2 contiennent toutes la valeur 1 dans col1 à col3, le résultat devrait être 1, si ce n'est pas le cas, il devrait être 0.

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)

Puisque ma propre base de données est beaucoup plus grande, je cherche pour une manière plus élégante que la suivante, des pensées?

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)


0 commentaires

3 Réponses :


1
votes

Essayez plutôt ceci:

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


0 commentaires

5
votes

Un cas classique de tous .

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


2 commentaires

que faire si j'ai une valeur différente de 1 dans mes colonnes. une chaîne peut-être ou un booléen ?.


True et False sont équivalents à 1 et 0 en Python, donc bool n'est pas un problème. Si vous avez des chaînes, vous pouvez les convertir en int (avec astype ) `



0
votes

Ceci est plus générique et fonctionne également pour toute autre valeur. Remplacez simplement le deuxième == 1 par == .

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


0 commentaires