簡體   English   中英

有沒有辦法在 Python-Pandas 中多重過濾 Dataframe?

[英]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 >= 25arrest == 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

一些注意事項:

  • 不要忘記“引用”字符串
  • 可以使用的變量名稱來自 DataFrame 范圍(無需使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM