2016-06-29 8 views
2

Ich habe zwei Spalten in einem Pandas DataFrame (nennen wir 'col1' und col2 '). Beide enthalten True/False-Werte.Erstelle eine Spalte basierend auf der Bedingung, die zu 2 anderen Spalten gehört

Ich muss eine dritte Spalte aus diesen zwei ('Col3') erstellen, die einen True-Wert für einen Datensatz haben, wenn die eine oder die andere der beiden Spalten einen True-Wert in diesem Datensatz hat.

Derzeit Ich tue dies mit:

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 

Es arbeitet schnell genug für die Größe meines Datensatz, aber gibt es eine Möglichkeit, es in einer/vektorisiert Weise Einzeiler zu tun? Vielleicht mit zwei verschachtelten np.where() Aussagen?

Antwort

2

Sie können np.logical_or, dies zu tun:

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 

oder benutzen | Betreiber:

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 
Verwandte Themen