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)
运行效果如下图所示:
大家好,我是老表
觉得本文不错的话,转发、留言、点赞,是对我最大的支持。
每日留言
说说你读完本文感受?
或者一句激励自己的话?
(字数不少于15字)
想进学习交流群
加微信:jjxksa888
备注:简说Python
2小时快速掌握Python基础知识要点。
完整Python基础知识要点
近期推荐阅读:
【1】整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了
【2】【终篇】Pandas中文官方文档:基础用法6(含1-5)
觉得不错就点一下“在看”吧