从列表中一次性筛选多个指定位置的数据

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),第一时间获的最新更新:

相关文章
相关标签/搜索