看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas 利用布尔序列筛选数据是最为常见的数据筛选方式,本例是一个典型的数据查询案例,希望找出比它前后都大的数值,通过这个案例我们再来理解一下这种数据查询机制。
以下为我们构造的示例数据:
import pandas as pd
ser = pd.Series([1,2,5,4,6,1])
ser
'''
0 1
1 2
2 5
3 4
4 6
5 1
dtype: int64
'''
希望找出比它前后都大的数值,即 5 (前后分别是 2 和 4)和 6 (前后分别是4 和 1),它们均比它们前后的数字大。
利用向量化操作,可以分别判断数据比它之前一位和后一位是否大,得到两个布尔序列,再取这两个布尔序列的交集,为 True 的就是全部满足的数据。
最后用这个交集布尔序列来抽取 Series 就得到了结果。
与前后一位比较要对数据位移,可以使用 shift() 方法:
ser.shift() # 后移一位
'''
0 NaN
1 1.0
2 2.0
3 5.0
4 4.0
5 5.0
dtype: float64
'''
先比较后一位:
ser > ser.shift()
'''
0 False
1 True
2 True
3 False
4 True
5 False
dtype: bool
'''
再比较前一位:
ser > ser.shift(-1)
'''
0 False
1 False
2 True
3 False
4 True
5 False
dtype: bool
'''
求得两个布尔序列的交集:
(ser > ser.shift() ) & (ser > ser.shift(-1) )
'''
0 False
1 False
2 True
3 False
4 True
5 False
dtype: bool
'''
最后将此交集布尔序列应用到数据抽取中:
ser[(ser > ser.shift() ) & (ser > ser.shift(-1) ) ]
'''
2 5
4 6
dtype: int64
'''
这样就完成了需求。
(完)
更新时间:2024-08-18 16:07:58 标签:pandas python 查询