2015-06-18 92 views
6

我正在學習熊貓,在這裏遇到了這個問題。在熊貓數據框中追加布爾列

我創建了一個跟蹤所有用戶和他們做某事的次數的數據框。

爲了更好地理解我創造了這個例子的問題:

import pandas as pd 
data = [ 
    {'username': 'me', 'bought_apples': 2, 'bought_pears': 0}, 
    {'username': 'you', 'bought_apples': 1, 'bought_pears': 1} 
] 
df = pd.DataFrame(data) 
df['bought_something'] = df['bought_apples'] > 0 or df['bought_pears'] > 0 

在最後一行我想增加一列,表示如果他們的用戶已經購買的東西都沒有。

此錯誤彈出:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我理解歧義大熊貓的系列(also explained here)的點,但我不能它涉及到的問題。

有趣的是這個作品

df['bought_something'] = df['bought_apples'] > 0 

誰能幫助我?

回答

11

您可以致電sum逐行和比較,如果這是比0更大:

In [105]: 
df['bought_something'] = df[['bought_apples','bought_pears']].sum(axis=1) > 0 
df 

Out[105]: 
    bought_apples bought_pears username bought_something 
0    2    0  me    True 
1    1    1  you    True 

關於你原來的嘗試,錯誤信息告訴你,這是不明確的標量比較的數組,如果要or布爾條件,那麼你需要使用逐位運算符|,敷在括號中由於運算符優先級的條件:

In [111]: 
df['bought_something'] = ((df['bought_apples'] > 0) | (df['bought_pears'] > 0)) 
df 

Out[111]: 
    bought_apples bought_pears username bought_something 
0    2    0  me    True 
1    1    1  you    True 
2

ŧ他認爲這個錯誤是你用'或'來連接兩個布爾向量,而不是布爾標量。這就是爲什麼它說這是不明確的。