前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:从列表中一次性筛选多个指定位置的数

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

作者头像
青南
发布2019-06-18 19:33:00
7590
发布2019-06-18 19:33:00
举报
文章被收录于专栏:未闻Code未闻Code

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

假设现在有这样一个DataFrame:

代码语言:javascript
复制
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的数据,可以这样写:

代码语言:javascript
复制
df[df['age'] >= 30]

运行效果如下图所示:

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

代码语言:javascript
复制
df[[False, True, False, True]]

如下图所示:

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

代码语言:javascript
复制
name_list = ['kingname', 'alice', 'bob', 'cindy']
position_list = [True, False, True, False]

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

你可能会这样写代码:

代码语言:javascript
复制
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(),其使用方法如下:

代码语言:javascript
复制
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)

运行效果如下图所示:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档