我有一个数据框,其中包含一些这样的数值:
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方式。
答案 0 :(得分:2)
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