Использовать 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, по умолчанию = 0)
Возвращает массив, составленный из элементов в списке выбора, в зависимости от условий.
Здесь список условий (df.gt(0).all(axis=1))
и (df.lt(0).all(axis=1))
, который проверяет наличие2 условия вы упомянули.( Для лучшей практики вы можете просто напечатать условие, чтобы проверить вывод ).Остальное мы последовательно размещаем на выбор, здесь 1 и -1.последний параметр по умолчанию, который по умолчанию равен нулю. Вы можете указать, требуется ли другое значение по умолчанию.
Производительность :
%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)