根据条件为pandas df列分配三个值

时间:2019-08-02 15:30:40

标签: python pandas dataframe

我有一个pandas df,其中包含一列正负负数和零。我想创建另一列,如果no> 0则为1,如果no <0则为-1,如果数字为0则为0。

我正在尝试使用for循环为每一行执行此操作,但是这花费的时间太长。我想知道是否有更快的方法。我还想知道是否可以将相同的逻辑扩展到正负timedelta对象。
谢谢。

我的最终df应该如下所示:

df = pd.DataFrame({'a':[1, 2, -1, 0, -2], 'b':[1, 1, -1, 0, -1]})

     a   b
0    1   1
1    2   1
2   -1  -1
3    0   0
4   -2  -1

其中b是根据a的值分配的col

2 个答案:

答案 0 :(得分:3)

这是numpy sign

的一种方法
np.sign(df.a)
Out[118]: 
0    1
1    1
2   -1
3    0
4   -1
Name: a, dtype: int64
df['b'] = np.sign(df.a)

答案 1 :(得分:2)

尝试使用np.where并提供条件

import numpy as np

df['b']= np.where(df['a']>0,1,
         np.where(df['a']<0,-1,0))
     a   b
0    1   1
1    2   1
2   -1  -1
3    0   0
4   -2  -1

@rafaelc解决方案

m1= df['a'] >0
m2= df['a'] <0


df['b'] = np.select([m1, m2],
                    [ 1, -1], 
                    default=0)