python - pandas - 布尔比较 - 如何将列的每个值与整数进行比较?

时间:2016-11-24 19:00:17

标签: python pandas

熊猫的快速提问。 假设我有一个存储以下值的pandas数据框

timestamp              value                                   
2000-01-03 00:00:00       25  
2000-01-03 00:30:00      -10  
2000-01-03 01:00:00      100  
2000-01-03 01:30:00     -690  
2000-01-03 02:00:00      650  
2000-01-03 02:30:00      320  
2000-01-03 03:00:00      150  
2000-01-03 03:30:00      160

我想添加一个列,其中填充的地方a = 1,如果值> 0,则为其他-1

timestamp              value    a                                 
2000-01-03 00:00:00       25    1
2000-01-03 00:30:00      -10   -1
2000-01-03 01:00:00      100    1
2000-01-03 01:30:00     -690   -1
2000-01-03 02:00:00      650    1
2000-01-03 02:30:00      320    1
2000-01-03 03:00:00      150    1
2000-01-03 03:30:00      160    1

是否有一个简单的熊猫语法来做到这一点? 我已经尝试了大量的代码,而不是在这里发布,因为它比任何东西都更令人困惑......

谢谢! (我正在改变问题以使其更清楚,对不起......)

2 个答案:

答案 0 :(得分:1)

使用np.sign()方法:

In [22]: df['a'] = np.sign(df.value)

In [23]: df
Out[23]:
             timestamp  value  a
0  2000-01-03 00:00:00     25  1
1  2000-01-03 00:30:00    -10 -1
2  2000-01-03 01:00:00    100  1
3  2000-01-03 01:30:00   -690 -1
4  2000-01-03 02:00:00    650  1
5  2000-01-03 02:30:00    320  1
6  2000-01-03 03:00:00    150  1
7  2000-01-03 03:30:00    160  1
8  2000-01-03 04:00:00      0  0   # <-----

注意:np.sign - 为0值返回0,如果您希望-1为零值,请使用np.where()

In [24]: df['a2'] = np.where(df.value > 0, 1, -1)

In [25]: df
Out[25]:
             timestamp  value  a  a2
0  2000-01-03 00:00:00     25  1   1
1  2000-01-03 00:30:00    -10 -1  -1
2  2000-01-03 01:00:00    100  1   1
3  2000-01-03 01:30:00   -690 -1  -1
4  2000-01-03 02:00:00    650  1   1
5  2000-01-03 02:30:00    320  1   1
6  2000-01-03 03:00:00    150  1   1
7  2000-01-03 03:30:00    160  1   1
8  2000-01-03 04:00:00      0  0  -1   # <----

答案 1 :(得分:0)

此代码应该有效:

list(trend.map(lambda x: 1 if x is True else -1))

如果您不想要列表,只需删除list()即可。然后它返回一个系列。

如果您想要trade上的工作:

trade.trend.map(lambda x: 1 if x is True else -1)

会做同样的工作。