标签:Python,Pandas
本文介绍在pandas中如何找到与给定输入最接近的值。
有时候,我们试图使用一个值筛选数据框架,但是这个值不存在,这样我们会接收到一个空的数据框架,这不是我们想要的。我们想要的是,在数据框架中找到与这个输入值最接近的值。
下面是一个简单的数据集,将用于演示这项技术。假设有5天的SPY股票(假想)价格。
图1
假设我们想要找到与价格386最接近的值所在的行。通过观察,我们注意到有两个值与386接近,即390和380。显然,390比380更接近于386。
在这种情况下,我们不能使用大于“>”或小于“<”之类的筛选器,因为不知道匹配值是高于还是低于给定的输入值386。
过程
1.计算每个值与输入值之差。
2.使用差的绝对值,以帮助排名,因为可能有正数和负数。
3.对上述第2步的结果进行排序,绝对差值最小的记录就是最接近输入值的记录。
下面显示了上述第2步的结果:
图2
接下来,可以对数据框架使用sort_values(),然后找到第一个(最低值的)条目。然而,有更好的方法。
pandas argsort()方法
argsort()方法返回将对值进行排序的整数索引。例如:
图3
看起来可能有点混乱,尤其是当看带有日期栏的排名时。
1.在右侧,原始数据框架(或绝对差数据框架,因为它们的索引相同)有一个数字索引0,1,2,3,4。
2.在左侧,忽略索引/日期列,argsort()按顺序返回数字索引
3.如果将此顺序应用于原始数据框架,正如下面几行所示,那么我们可以对数据框架进行排序:
值4(2022-05-08)行应该转到第一个位置
值6(2022-05-10)行应该转到第二个位置
……
值64(2022-05-11)行应该转到最后一个位置
图4
然后,可以使用iloc[]属性重新组织数据框架:
图5
如果我们只想要得到最接近的值,而不是整个排序的数据框架:
图6
注:本文学习整理自pythoninoffice.com,供有兴趣的朋友学习参考。