Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据条件为列指定三个值_Python_Pandas_Dataframe - Fatal编程技术网

Python 根据条件为列指定三个值

Python 根据条件为列指定三个值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含正数、负数和零的列。我想用板条箱装另一列,如果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

我有一个包含正数、负数和零的列。我想用板条箱装另一列,如果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的值分配的列,这里是单向
numpy
符号

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)

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

import numpy as np

df['b']= np.where(df['a']>0,1,
         np.where(df['a']<0,-1,0))
@rafaelc的解决方案
m1=df['a']>0

m2=df['a']谢谢。对于timedelta对象,有什么方法可以做到这一点。我试过了,但没有成功work@Moshee
np.sign((df.a/np.timedelta64(1,'D')).astype(int))
@Moshee有关多个条件的更多信息,首选
np。选择
而不是嵌套的
np。其中
让我修改little@rafaelc谢谢你的建议。我已经添加了np。select@WeNYoBen谢谢,我实际上不使用np。请选择“更多”,这就是为什么我不熟悉
default
     a   b
0    1   1
1    2   1
2   -1  -1
3    0   0
4   -2  -1
m1= df['a'] >0
m2= df['a'] <0


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