我有一个pandas数据帧df
>>> df
a b c
0 1 1 0
1 1 -1 1
2 1 0 0
现在我想在列a
和b
上添加新列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循环需要永远这样做。
答案 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]