Python Pandas:考虑多个条件,正确筛选数据帧列

Python Pandas:考虑多个条件,正确筛选数据帧列,python,pandas,dataframe,jupyter-notebook,feature-engineering,Python,Pandas,Dataframe,Jupyter Notebook,Feature Engineering,我有一个数据框,代表餐馆的顾客评级star_rating是此数据框中客户的评级 我想做的是在同一数据框中添加一列nb\u favorables\u note,该列表示至少收到一个“有用”或“有趣”或“酷”评级的评论总数,且评论评级>=3。 data={'rating_id':[1','2','3','4','5','6','7','8','9'], ‘使用者识别码’:[‘56’、‘13’、‘56’、‘99’、‘99’、‘13’、‘12’、‘88’、‘45’], ‘餐厅id’:[‘xxx’、‘

我有一个数据框,代表餐馆的顾客评级
star_rating
是此数据框中客户的评级

  • 我想做的是在同一数据框中添加一列
    nb\u favorables\u note
    ,该列表示至少收到一个“有用”或“有趣”或“酷”评级的评论总数,且评论评级>=3。
data={'rating_id':[1','2','3','4','5','6','7','8','9'],
‘使用者识别码’:[‘56’、‘13’、‘56’、‘99’、‘99’、‘13’、‘12’、‘88’、‘45’],
‘餐厅id’:[‘xxx’、‘xxx’、‘yyy’、‘xxx’、‘zzz’、‘zzz’、‘eee’、‘eee’],
‘星级’:[‘2.3’、‘3.7’、‘1.2’、‘5.0’、‘1.0’、‘3.2’、‘1.0’、‘2.2’、‘0.2’],
‘评级年’:[‘2012’、‘2012’、‘2020’、‘2001’、‘2020’、‘2015’、‘2000’、‘2003’、‘2004’],
‘第一年’:[‘2012’、‘2012’、‘2001’、‘2012’、‘2000’、‘2000’、‘2001’、‘2001’],
‘最后一年’:[‘2020’、‘2020’、‘2020’、‘2020’、‘2020’、‘2015’、‘2015’、‘2020’、‘2020’],
'有趣':['1','0','0','1','1','1','0','0','0'],
“有用”:['1','0','0','0','1','0','0','0','0','1'],
‘酷’:[‘1’、‘0’、‘0’、‘1’、‘1’、‘1’、‘1’、‘1’、‘1’、‘1’],
}
df=pd.DataFrame(数据,列=['rating_id'、'user_id'、'restaurant_id'、'star_rating'、'rating_year'、'first_year'、'last_year'、'Funcy'、'Usable'、'cool')
df[“星级”]=df[“星级”].aType(浮动)
过滤后的数据=df[(df[‘星级’]>=3)和(df[‘有趣’]==1;df[‘有用’]==1;df[‘酷’]==1)]
d=过滤的数据。groupby('restaurant_id')['star_rating'].count()。to_dict()
df['nb_favorables_note']=df['restaurant_id'].地图(d)
测向头(20)
我不确定我的语法出了什么问题,但从我的尝试中,我不断收到这些错误消息

  • ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

  • TypeError:无法对数据类型为[object]的数组和类型为[bool]的标量执行“ror”


考虑到我试图实现的目标,正确的语法是什么?

您遇到了运算符优先级问题;在python中,
|
运算符的优先级高于
=
,将比较表达式括在括号中应该可以解决您的问题,而且因为
有趣的
有用的
酷的
列都是str类型,请使用字符串
'1'
而不是数字
1

filtered_data = df[(df['star_rating'] >= 3) & ((df['funny']=='1') | (df['useful']=='1') | (df['cool']=='1'))]

除了使用
|
,您还可以一次比较多个列,然后使用
任何
检查条件:

filtered_data = df[(df['star_rating'] >= 3) & df[['funny', 'useful', 'cool']].eq('1').any(axis=1)]

谢谢你的回答,我认为它对我的大数据集有效,但我有一个奇怪的警告说
FutureWarning:elementwise比较失败;返回标量,但将来将执行元素比较返回op(a,b)。
您知道这是什么意思吗?它来自上面的代码片段还是您代码的其他部分?当我在数据帧上执行.head()时,它位于输出上方。从您指出的第一个操作开始。您可能想检查这个问题:我知道,在我的大数据框中,值是有趣的,等等。。不是字符而是整数