如何检查熊猫中每一行的条件

时间:2019-02-24 10:55:44

标签: python pandas numpy

我有一个数据框,其中包含一些这样的数值:

WScript.Echo list("name").Value

我希望有一个 col1 col2 0 1 3 1 -2 -4 2 3 -5 ,其中包含:
1-如果该行中的所有值均> 0,
-1-如果行中的所有值均<0和
0-其他所有情况

因此,我得到的df应该如下所示:

col3

请让我知道使用Pandas和/或Numpy实现此功能的最Python方式。

3 个答案:

答案 0 :(得分:2)

使用numpy.select()

df['col3']=np.select([(df.gt(0).all(axis=1)),(df.lt(0).all(axis=1))],[1,-1],0)
print(df)

   col1  col2  col3
0     1     3     1
1    -2    -4    -1
2     3    -5     0

说明,如文档所述:

  

numpy.select(condlist,choicelist,default = 0)

     

根据条件返回从选择列表中的元素绘制的数组。

这里的条件列表是(df.gt(0).all(axis=1))(df.lt(0).all(axis=1)),用于检查您提到的2个条件。 (为了更好的练习,您可以只打印条件以检查输出)。其余的我们依次放置选择,这里是1和-1。最后一个参数是default,默认情况下为零,您可以指定是否需要其他默认值。

性能

%timeit np.select([(df.gt(0).all(axis=1)),(df.lt(0).all(axis=1))],[1,-1],0)
#414 µs ± 18.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

答案 1 :(得分:1)

您也可以使用df.all()

df['col3'] = (df > 0).all(axis=1) * 1 + (df < 0).all(axis=1) * -1

print(df)

   col1  col2  col3
0     1     3     1
1    -2    -4    -1
2     3    -5     0

答案 2 :(得分:1)

另一个解决方案是:

df = pd.DataFrame([[1, 3], [-2, -4], [3, -5]], columns=['col1', 'col2'])
df['col3'] = df.gt(0).all(axis=1) * 1 - df.lt(0).all(axis=1) * 1
print(df)

   col1  col2  col3
0     1     3     1
1    -2    -4    -1
2     3    -5     0