簡體   English   中英

以矢量化方式將列添加到 Pandas DataFrame 以對其他列值進行調節

[英]Adding Column to pandas DataFrame in Vectorized way conditioning on other column values

我有一個熊貓數據框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-loop 需要很長時間才能做到這一點。

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

您的錯誤源於您使用的是and ,而不是& 切換到后者,你的錯誤就會消失。

解決方案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM