2 votes

Créer une colonne basée sur une condition relative à 2 autres colonnes

J'ai deux colonnes dans un DataFrame pandas (appelons-les 'col1' et 'col2'). Elles contiennent toutes deux des valeurs True/False.

Je dois créer une troisième colonne à partir de ces deux colonnes ("col3"), qui aura une valeur True pour un enregistrement si l'une ou l'autre des deux colonnes a une valeur True dans cet enregistrement.

Actuellement, je le fais avec :

col3 = []

for index, row in df.iterrows():
    if df.ix[index, 'col1'] == True or df.ix[index, 'col2'] == True:
        col3.append(True)
    else:
        col3.append(False)

df['col3'] = col3

Cela fonctionne assez rapidement pour la taille de mon jeu de données, mais y a-t-il un moyen de le faire en une seule ligne/de manière vectorisée ? Peut-être en utilisant deux np.where() déclarations ?

2voto

EdChum Points 10205

Vous pouvez utiliser np.logical_or pour ce faire :

In [236]:
df = pd.DataFrame({'col1':[True,False,False], 'col2':[False,True,False]})
df

Out[236]:
    col1   col2
0   True  False
1  False   True
2  False  False

In [239]:
df['col3'] = np.logical_or(df['col1'], df['col2'])
df

Out[239]:
    col1   col2   col3
0   True  False   True
1  False   True   True
2  False  False  False

ou utiliser | de l'opérateur :

In [240]:
df['col3'] = df['col1'] | df['col2']

df
Out[240]:
    col1   col2   col3
0   True  False   True
1  False   True   True
2  False  False  False

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X