2017-04-08 15 views
0

Ich möchte zwei kontinuierliche Hauspreis Verkauf vergleichen, und neue Spalte erstellen, die binäre Variablen speichert.Wie zwei Spalten zu vergleichen, mit Python?

Das ist mein Prozess so weit ist:

dataset['High'] = dataset['November'].map(lambda x: 1 if x>50000 else 0) 

Das bin ich nur eine Spalte zu arbeiten erlaubt, aber ich möchte Hauspreis Spalten beide November und Dezember und neue Spalte vergleichen, die enthält binäre Variablen.

Ich möchte diese Ausgang

November - December - NewCol 
------------------------------- 
651200 - 626600 - 0 
420900 - 423600 - 1 
82300 - 83100 - 1 
177000 - 169600 - 0 
285500 - 206300 - 0 
633900 - 640000 - 1 
218900 - 222400 - 1 
461700 - 403800 - 0 
419100 - 421300 - 1 
127600 - 128300 - 1 
553400 - 547800 - 0 

November und Dezember ist eine kontinuierliche Variable, und ich wollte so durch sie in eine binäre Variable umwandeln. Ich mag die ifelse() Funktion verwenden, um eine Variable zu erstellen, die so genannten „NEWCOL“, die auf einem Wert von „1“ nimmt, wenn der [ ‚November‘] Spalt größer als [ ‚Dezember‘ ], und nimmt einen Wert von "0" sonst.

Antwort

0

Wenn ich richtig verstanden habe, können Sie die folgenden verwenden, um eine boolesche Spalte zu erstellen. Wir müssen nicht einmal eine ifelse Anweisung verwenden. Stattdessen können wir die vektorisierte Natur von Pandas-Datenrahmen verwenden.

data['NewCol'] = data['November'] > data['December'] 

Dies gibt eine Spalte von True und False Werte anstelle von 1 und 0, aber sie sind funktionell gleichwertig. Sie können summieren, nehmen Sie Mittel usw. Behandeln True als 1 und False als 0.

+0

Vielen Dank, aber ich kann die Lösung. – SolowDev

+0

@ user3393879 Sie können die Lösung? Das ist großartig! ... ist es? – tdelaney

1

Antwort: Dies würde den Trick tun.

dataset['deff'] = np.where(dataset['2016-11'] >= dataset['2016-12'], 0,1) 
1

Ähnlich wie @ 3novak aber mit Gießen. Man verwendet pandas für größere Effizienz, aber wenn Sie etwas wie map verwenden, die Werte benötigt, die als (teurere) Python-Variablen ausgedrückt werden, können Sie auch einfach Python-Listen verwenden. Versuchen Sie stattdessen, Pandas-Operationen zu verwenden, die für ganze Serien und Datenrahmen gelten.

>>> import pandas as pd 
>>> df = pd.read_csv('test.csv') 
>>> df 
    November December 
0  651200 626600 
1  420900 423600 
2  82300  83100 
3  177000 169600 
4  285500 206300 
5  633900 640000 
6  218900 222400 
7  461700 403800 
8  419100 421300 
9  127600 128300 
10 553400 547800 
>>> df['Higher'] = df['December'].gt(df['November']).astype(int) 
>>> df 
    November December Higher 
0  651200 626600  0 
1  420900 423600  1 
2  82300  83100  1 
3  177000 169600  0 
4  285500 206300  0 
5  633900 640000  1 
6  218900 222400  1 
7  461700 403800  0 
8  419100 421300  1 
9  127600 128300  1 
10 553400 547800  0 
Verwandte Themen