Pandas 在 LOC 函数中使用 and 运算符

Pandas use and operator in LOC function

我想在 loc 函数中有 2 个条件,但是 &&and 运算符似乎不起作用。:

df:

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

我的代码: 我正在尝试收集所有 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 运算符?

您需要 & 作为 and 逻辑运算符,因为需要 element-wise and,请参阅 boolean indexing:

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

使用query

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

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

使用 ~ 进行非逻辑运算

例如:

train.loc[(train['MiscVal'] == 0) & (~train['MiscFeature'].isna())]