有没有办法在Python中对数据帧进行多重筛选?
正在寻找一些方法,通过几个标准过滤我的数据帧(例如,数据帧:有没有办法在Python中对数据帧进行多重筛选?,python,pandas,Python,Pandas,正在寻找一些方法,通过几个标准过滤我的数据帧(例如,数据帧: id Arrest Shift_num Description 0 True 20 Weapon 1 False 25 unarmed 2 True 30 Weapon 我想通过以下方式获得DF: Description==武器和shift_num>=25和逮捕==True(例如) 经过几次尝试,这是我的方式,但我认为它可以比这更好: arrest=
id Arrest Shift_num Description
0 True 20 Weapon
1 False 25 unarmed
2 True 30 Weapon
我想通过以下方式获得DF:
Description==武器和shift_num>=25
和逮捕==True
(例如)
经过几次尝试,这是我的方式,但我认为它可以比这更好:
arrest=(df.Arrest == True)
shift=(df.Shift_num >= 25)
weap= (df['Description'] == 'weapon')
print(df[arrest & shift & weap])
提前感谢:)您可以尝试切片:
df = pd.DataFrame({'Arrest':[True,False,True],'Shift_num':[20,25,30],'Description':['Weapon','unarmed','Weapon']})
df.loc[(df['Description'] == 'Weapon') & (df['Shift_num'] > 25) & (df['Arrest'] == True)]
您可以使用(额外的好处:它使用了非常优化的numexpr
):
输出:
Arrest Shift_num Description
2 True 30 Weapon
一些注意事项:
- 不要忘记“引用”字符串
- 可以使用的变量名来自数据帧范围(无需使用
作为前缀)df
- 如果不想被捕,请使用
~逮捕
- 您可以使用
引用范围中的变量(即不在df中)@
我鼓励你阅读。你的作品。这是一个单班轮,可能会稍微更有效。由于
逮捕
是一个布尔字段,因此可以直接对其求值,而不是使用==True
In [5]: df[(df.Description == 'Weapon') & (df.Shift_num >= 25) & (df.Arrest)]
Out[5]:
id Arrest Shift_num Description
2 2 True 30 Weapon
df[df['restart'].eq(True)&df['Shift_num'].ge(25)&df['Description'].eq(武器)]
我觉得你的解决方案不错。你的解决方案通常是在熊猫中完成的。一次应用所有三个掩码可能比将每个掩码存储为变量要好一些。请参阅文档中的布尔索引:太棒了,非常感谢:))谢谢it@MaxBoyar不客气!如果答案解决了你的问题,请随意接受。谢谢,为我工作,谢谢:)
In [5]: df[(df.Description == 'Weapon') & (df.Shift_num >= 25) & (df.Arrest)]
Out[5]:
id Arrest Shift_num Description
2 2 True 30 Weapon