如何比较两列,使用python?

时间:2017-04-08 18:55:00

标签: python database uitableview pandas ipython

我想比较两个连续的房价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”

3 个答案:

答案 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']

这会返回一列TrueFalse值,而不是10,但它们在功能上是等效的。您可以将True 1False视为0,并将其视为等等。