我有一个 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 循环需要很长时间才能完成此操作。
最佳答案
您可以使用非常快numpy.where
:
df['e'] = np.where((df['a'] == 1) & (df['b'] == 1), -1, 1)
print (df)
a b c e
0 1 1 0 -1
1 1 -1 1 1
2 1 0 0 1
关于python - 以矢量化方式将列添加到 pandas DataFrame 中以其他列值为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41062277/