将Column添加到pandas DataFrame中,以Vectorized方式调整其他列值

时间:2016-12-09 14:08:08

标签: python pandas dataframe conditional-statements vectorization

我有一个pandas数据帧df

>>> df
           a  b  c  
0          1  1  0             
1          1 -1  1                    
2          1  0  0

现在我想在列ab上添加新列df ['e']条件。我想以矢量化的方式创建新列。

目前,我的做法如下:

df["e"] = [-1 if (df['a'] == 1 and df['b'] == 1) else 1]

应输出:

>>> df
               a  b  c  e 
    0          1  1  0 -1          
    1          1 -1  1  1                  
    2          1  0  0  1

但是我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/hmishfaq/anaconda/lib/python2.7/site-packages/pandas/core/generic.py", line 917, in __nonzero__
    .format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我做错了什么,以及在这里进行矢量化的正确方法是什么?

PS:我需要使用的原始数据帧非常大,因此for循环需要永远这样做。

2 个答案:

答案 0 :(得分:3)

您可以使用非常快numpy.where

------------------------------
clientid | december| february
------------------------------
1        | 2:20    | 4:00
------------------------------
2        | 4:00    | 7:00
------------------------------ 

答案 1 :(得分:0)

您的错误源于您使用and而不是&的事实。切换到后者,您的错误就会消失。

解决方案:

df["e"] = [-1 if (df['a'] == 1 & df['b'] == 1) else 1]