[英]Is there a way to multiple filter Dataframe in Python-Pandas?
尋找某種方法來通過幾個條件過濾我的數據框(例如數據框:
id Arrest Shift_num Description
0 True 20 Weapon
1 False 25 unarmed
2 True 30 Weapon
我想通過以下方式獲得 DF:Description == Weapon 和shift_num >= 25
和arrest == True
(例如)
經過幾次嘗試,這是我的方式,但我認為它可以比這更好:
arrest=(df.Arrest == True)
shift=(df.Shift_num >= 25)
weap= (df['Description'] == 'weapon')
print(df[arrest & shift & weap])
提前致謝 :)
您可以使用df.query (一個獎勵:它使用非常優化的numexpr
!):
import pandas as pd
df = pd.DataFrame({"Arrest": [True, False, True],
"Shift_num": [20, 25, 30],
"Description": ["Weapon", "unarmed", "Weapon"]})
df.query("Arrest & Shift_num >= 25 & Description == 'Weapon'")
輸出:
Arrest Shift_num Description
2 True 30 Weapon
一些注意事項:
df
前綴)~Arrest
@
來引用作用域中的變量(即不在 df 中)我鼓勵您閱讀有關numexpr 的信息。
您可以嘗試切片:
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)]
你有什么作品。 這是一個可能更有效的單襯。 由於Arrest
是一個布爾字段,您可以直接評估它而不是使用== 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.