根据条件为列指定三个值

2024-05-29 04:12:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含正数、负数和零的列。我想用板条箱装另一列,如果“否”为>;0,则为1;如果“否”为<;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的值分配的列


Tags: 对象方法ltgtdffor时间数字
2条回答

尝试使用np.哪里并提供条件

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)

这里有一个方法numpysign

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)

相关问题 更多 >

    热门问题