python - 以矢量化方式将列添加到 pandas DataFrame 中以其他列值为条件

标签 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 循环需要很长时间才能完成此操作。

最佳答案

您可以使用非常快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/

相关文章:

python - 对数据框多索引级别和按列进行排序

pandas - Python Pandas:从多级列索引中删除一列?

python - 如何计算两个时间戳的小时差并排除周末

python - 如何使用 Python 在 Pandas 中应用多个条件?

python - 在 numpy 数组的第三个维度中,将前三个值乘以第四个值

python - 通过混合列表和数据帧列,数组长度与索引长度不匹配

python - 在 Google Cloud Dataflow/Apache Beam 中创建 GCS 对象的 PCollection

python - 如何工作 "expand cells containing lists into their own variables in pandas"

涉及带有属性的 HTML 标签的 Python 网络抓取

java - 获得数据库更新和更新提要的通知