我想做一个多重查询。这是我的数据框:
data = {'Name':['Penny','Ben','Benny','Mark','Ben1','Ben2','Ben3'],
'Eng':[5,1,4,3,1,2,3],
'Math':[1,5,3,2,2,2,3],
'Physics':[2,5,3,1,1,2,3],
'Sports':[4,5,2,3,1,2,3],
'Total':[12,16,12,9,5,8,12],
'Group':['A','A','A','A','A','B','B']}
df1=pd.DataFrame(data, columns=['Name','Eng','Math','Physics','Sports','Total','Group'])
df1
我有3个问题:
我试着一个接一个地做
df1[df1.Name.str.startswith('B')]
df1.query('Math > Eng')
df1[df1.Group == 'A'] #I cannot run the code with df1[df1.Group == 'A' or 'B']
然后,我尝试合并这些查询
df1.query("'Math > Eng' & 'df1[df1.Name.str.startswith('B')]' & 'df1[df1.Group == 'A']")
TokenError: ('EOF in multi-line statement', (2, 0))
我还试图将str.startswith()
传递到df.query()
df1.query("df1.Name.str.startswith('B')")
UndefinedVariableError: name 'df1' is not defined
我试过很多方法,但没有一种有效。我怎样才能把这些问题放在一起
解决这个问题的一个很长的方法是为每个过滤器创建一个布尔列,这是透明度最高的方法,对初学者来说也是最好的方法。然后将这些列相加为一个最终过滤器:
您当然可以将这些步骤合并为一个步骤:
最后,选择满足筛选条件的行的操作如下:
这将从
df1
中选择行,其中final_filter == True
首先,答案是:
补充意见
query
中,列的名称不随数据帧的名称一起出现李>df1[df1.Group.isin(['A', 'B'])]
或df1.query("Group in ['A', 'B']")
而不是df1[df1.Group == 'A' or 'B']
相关问题 更多 >
编程相关推荐