2016-12-09 13 views
3

Ich habe einen Pandas-Datenrahmen, dem ich eine neue Spalte hinzufügen möchte. Die neuen Spaltenwerte werden durch eine bestehende Spalte in dem Datenrahmen bestimmt, die Bools enthält. Der folgende Code ist meine C++ - Logik, die in Python angewendet wird, aber ich hätte gerne eine "pythonische" Möglichkeit, dies zu tun. 'isfixed' enthält die bools und die neue Spalte wird für die Hilfe 'color code'Hinzufügen einer Spalte zu Pandas Datenrahmen basierend auf Bool-Werten in der vorhandenen Spalte

for i in range(data_2015['isfixed'].count()): 
    if data_2015['isfixed'][i] == True: 
     data_2015['color code'][i] = 'Blue' 
    else: 
     data_2015['color code'][i] = 'Green' 

Vielen Dank im voraus sein!

+1

Ich würde sagen, dieser Ansatz ist perfekt pythonisch, aber nicht sehr pandonisch! –

Antwort

2

können Sie verwenden numpy.where:

import numpy as np 
data_2015['color_code'] = np.where(data_2015['isfixed'], 'Blue', 'Green') 

Eine Demo:

df = pd.DataFrame({'isfixed': [True, False, True]}) 

df 
Out: 
    isfixed 
0 True 
1 False 
2 True 


df['color_code'] = np.where(df['isfixed'], 'Blue', 'Green') 

df 
Out: 
    isfixed color_code 
0 True  Blue 
1 False  Green 
2 True  Blue 
+0

Danke @ayhan. Ich mag das, nur eine Zeile. Der pythonische Weg herrscht! – ProficientInMath

+0

Gern geschehen. Nur eine Anmerkung: Dies kann auch durch 'df ['color_code'] = ['Blau' wenn Zeile sonst 'Grün' für Zeile in df ['isfixed']]' getan werden, aber eingebaute numpy/pandas Funktionen sind in der Regel viel schneller als das Iterieren über ein Series/Array. – ayhan

+0

Richtig, ich wurde davor gewarnt, in Bezug auf die Geschwindigkeit über Serien zu iterieren. Mein Verständnis ist, dass es am schnellsten ist, Funktionen über die gesamte Serie anzuwenden, anstatt jedes Element zu durchlaufen, richtig? – ProficientInMath

0

Für eine reine Pandas Lösung:

df = pd.DataFrame({'isfixed': [True, False, True]})

df['color_code'] = ["Blue" if value==True else "Green" for value in df['isfixed']]

Verwandte Themen