码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-12-08 12:51:15      阅读:7      评论:0      收藏:0      [点我收藏+]

标签:http   import   from   技术   使用方法   筛选   python   too   就是   

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

技术图片

Pandas的DataFrame在筛选列数据的时候,有一个非常方便的用法。

假设现在有这样一个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的数据,可以这样写:

df[df[‘age‘] >= 30]

运行效果如下图所示:
技术图片

而这里面的原理,实际上可以使用下面这个代码来解释:

df[[False, True, False, True]]

如下图所示:
技术图片

那么问题来了,我有一个Python里面,列表能不能也实现这个功能呢?假设有下面两个列表:

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

position_list = [True, False, True, False]

我想把 position_list列表中, True的下标在 name_list中对应的值都获取下来。

你可能会这样写代码:

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)

运行效果如下图所示:
技术图片

kingname
攒钱给产品经理买房。

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

标签:http   import   from   技术   使用方法   筛选   python   too   就是   

原文地址:https://blog.51cto.com/15023263/2559300

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!