2017-01-17 14 views
3

я хочу иметь 2 условия в функции loc но && или and операторы не кажется, работают .:Панды использовать и оператор в функции LOC

ДФ:

business_id ratings review_text 
xyz   2  'very bad' 
xyz   1  'passable' 
xyz   3  'okay' 
abc   2  'so so' 

mycode: я пытаясь собрать все review_text, чьи рейтинги < 3 и имеют id = xyz в список

id = 'xyz' 
mylist = df.loc[df['ratings'] < 3 and df[business_id] ==id,'review_text'].values.tolist() 

я должен получить:

['very bad','passable'] 

Этот код не работает, и я получаю сообщение об ошибке:

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

как я использовать оператор and правильно здесь?

ответ

2

Вам нужно & для and логического оператора, потому что потребность поэлементно and см boolean indexing:

id = 'xyz' 
mylist=df.loc[(df['ratings'] < 3) & (df['business_id'] == id),'review_text'].values.tolist() 
print (mylist) 
['very bad', 'passable'] 
2

Использование query

df.query('ratings < 3 & business_id == @id').review_text.tolist() 

["'very bad'", "'passable'"]