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),第一時間獲的最新更新: