2017-04-08 34 views
0

我想比較兩個連續住宅價格Sale,並創建存儲二進制變量的新列。如何比較兩列,使用python?

這是迄今爲止我的過程:

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

這讓我的工作就只有一列,但我想比較兩種住房價格列,創建新列包含二進制變量。

我想這輸出

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 

十一月和十二月是連續可變的,所以我希望通過將其轉換爲二進制變量。我想使用ifelse()函數創建一個變量,稱爲「NEWCOL」,這需要對一個值「1」如果[「十一月」]柱大於[「臘」 ],並且取值爲「0」否則。

回答

0

如果我理解正確,可以使用以下命令創建一個布爾列。我們甚至不需要使用ifelse聲明。相反,我們可以使用熊貓數據框的矢量化特性。

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

這返回的TrueFalse值,而不是10列,但它們在功能上等同。您可以將True作爲1False作爲0

+0

謝謝,但我可以解決。 – SolowDev

+0

@ user3393879你能解決嗎?那很棒! ... 是嗎? – tdelaney

1

答案:這會做到這一點。

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

與@ 3novak類似,但與鑄造。一個使用pandas以獲得更高的效率,但是當您使用類似map的需要以(更昂貴的)python變量表示的值時,您可能只需使用python列表。嘗試使用適用於整個系列和數據框的熊貓操作。

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