2016-09-21 6 views
2

Ich bin ein Neuling für Datarahmen. Ich habe die Spalten A, B und und möchte die Daten in A und B verwenden, um einen Wert in C zu erstellen. Zum Beispiel, wenn A = 1 und/oder B = 1, dann möchte ich eine 1 in Spalte C platzieren und diese Logik für alle Zeilen im Datenrahmen.In Pandas Datenframe, generieren dritte Spalte Daten auf der Grundlage von Ergebnissen in zwei anderen Spalten

z.B. Ausgang Array:

  A B C 
0  1 0 
1  0 1 
2  1 1 
3  0 0 

etc

resultierende Array:

  A B C 
0  1 0 1 
1  0 1 1 
2  1 1 1 
3  0 0 0 

etc

Antwort

0
def f(x): 

    if (x.B==1) and (x.A !=1): #Or whatever logic you like 
     return 1 
    else: 
     return 0 

df['C'] = df.apply(lambda x: f(x), axis = 1) 
2

Bei einem gegebenen Ausgang DF von:

df = pd.DataFrame({'A': [1, 0, 1, 0], 'B': [0, 1, 1, 0]}) 

Dann können Sie Spalte C als solche erstellen:

df['C'] = (df == 1).any(axis=1).astype(int) 

Dann df wie Blätter:

A B C 
0 1 0 1 
1 0 1 1 
2 1 1 1 
3 0 0 0 
+0

'df [ 'C'] = (df == 1) .any (axis = 1) .astype (int) 'würde vielleicht genügen? – Zero

+0

@JohnGalt yup - alberne mich - danke. Ich habe die Antwort aktualisiert. –

2

Verwendung numpy.where:

df['C'] = np.where(df.A | df.B, 1, 0) 
print (df) 
    A B C 
0 0 0 0 
1 0 1 1 
2 1 0 1 
3 1 1 1 

df['C'] = np.where((df.A == 0) & (df.B == 0), 0, 1) 
print (df) 
    A B C 
0 0 0 0 
1 0 1 1 
2 1 0 1 
3 1 1 1 

Oder simplier zu konvertieren boolean Series zu int von astype:

df['C'] = (df.A | df.B).astype(int) 
print (df) 
    A B C 
0 0 0 0 
1 0 1 1 
2 1 0 1 
3 1 1 1 

df['C'] = (~((df.A == 0) & (df.B == 0))).astype(int) 
print (df) 
    A B C 
0 0 0 0 
1 0 1 1 
2 1 0 1 
3 1 1 1 
0

Sie können die logischen Funktionen von numpy verwenden logical_and und logical_or

import numpy as np 

df['C'] = np.logical_and(df['A'], df['B']).astype(int) 
0

Andere Lösung unter Verwendung eines list comprehesion und zip

df['C'] = [(1 if i or j == 1 else 0) for i,j in zip(df['A'], df['B'])] 

es zurück:

A B C 
0 1 0 1 
1 0 1 1 
2 1 1 1 
3 0 0 0 
Ändern 210

die Bedingung, wenn 'A' und 'B'== Verwendung &:

Beispiel:

df['C'] = [(1 if i & j == 1 else 0) for i,j in zip(df['A'], df['B'])] 

Dies wird zurück:

A B C 
0 1 0 0 
1 0 1 0 
2 1 1 1 
3 0 0 0 
Verwandte Themen