我想比较两个连续的房价Sale,并创建存储二进制变量的新列。
到目前为止,这是我的流程:
dataset['High'] = dataset['November'].map(lambda x: 1 if x>50000 else 0)
这允许我只处理一列,但我想比较 11月和 12月房价列,并创建包含二进制变量的新列。
我想要输出
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
11月和12月是一个连续变量,因此我希望将其转换为二进制变量。我想使用ifelse()函数创建一个名为“NewCol”的变量,如果 ['November,它将取值“1” '] 列大于 ['December'] ,并且取值“0”。
答案 0 :(得分:2)
与@ 3novak类似,但有铸造。一个人使用pandas
来提高效率,但是当你使用类似map
的东西需要表示为(更昂贵的)python变量的值时,你也可以使用python列表。尝试使用适用于整个系列和数据帧的pandas操作。
>>> 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
答案 1 :(得分:1)
答案:这可以解决问题。
dataset['deff'] = np.where(dataset['2016-11'] >= dataset['2016-12'], 0,1)
答案 2 :(得分:0)
如果我理解正确,您可以使用以下命令创建布尔列。我们甚至不需要使用ifelse
声明。相反,我们可以使用pandas数据帧的矢量化特性。
data['NewCol'] = data['November'] > data['December']
这会返回一列True
和False
值,而不是1
和0
,但它们在功能上是等效的。您可以将True
1
和False
视为0
,并将其视为等等。