[英]Adding column to pandas dataframe taking values from list in other column
[英]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
現在我想在列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-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.