從列表中一次性篩選多個指定位置的數據

Pandas的DataFrame在篩選列數據的時候,有一個很是方便的用法。python

假設如今有這樣一個DataFrame:微信

import pandas as pd


data = [
    {'name': 'kingname', 'age': 20, 'salary': 99999},
    {'name': 'alice', 'age': 30, 'salary': 99999},
    {'name': 'bob', 'age': 10, 'salary': 99999},
    {'name': 'cindy', 'age': 40, 'salary': 99999}
]
df = pd.DataFrame(data)
df
複製代碼

運行效果以下圖所示:函數

我要篩選全部age >= 30的數據,能夠這樣寫:spa

df[df['age'] >= 30]
複製代碼

運行效果以下圖所示:3d

而這裏面的原理,實際上可使用下面這個代碼來解釋:code

df[[False, True, False, True]]
複製代碼

以下圖所示:cdn

那麼問題來了,我有一個Python裏面,列表能不能也實現這個功能呢?假設有下面兩個列表:blog

name_list = ['kingname', 'alice', 'bob', 'cindy']

position_list = [True, False, True, False]
複製代碼

我想把position_list列表中,True的下標在name_list中對應的值都獲取下來。ip

你可能會這樣寫代碼:ci

name_list = ['kingname', 'alice', 'bob', 'cindy']
position_list = [True, False, True, False]

for name, position in zip(name_list, position_list):
    if position:
        print(name)
複製代碼

運行效果以下圖所示:

但實際上,在Python裏面有一個現成的函數能夠實現這個功能,那就是itertools.compress(),其使用方法以下:

from itertools import compress

name_list = ['kingname', 'alice', 'bob', 'cindy']
position_list = [True, False, True, False]

for name in compress(name_list, position_list):
    print(name)
複製代碼

運行效果以下圖所示:

若是這篇文章對你有幫助,請關注個人微信公衆號: 未聞Code(ID: itskingname),第一時間獲的最新更新:

相關文章
相關標籤/搜索