2017-04-08 39 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