Python在Pandas中重复查询最接近的值行

问题描述 投票:0回答:1

我在单个查询中看到过类似的问题:Closest Value in Pandas Series

我需要做类似的事情,但对于多个查询。

我有一列数据,就像一个时间输入,然后是另一列,它应该像一个函数。

对于Eg:

df = pd.concat([pd.Series(np.random.rand(51), name = 'f'), pd.Series(np.sort(np.random.choice(range(150), 51, replace=False)), name = 't')], axis = 1)

这给出了前五行:

df.head()
        f       t
0   0.459344    0
1   0.675319    3
2   0.481433    8
3   0.373959    12
4   0.554812    14

基本上,列f就像一个函数,它在区间[0,3]中的值是0.459344,在区间[3,8]中它是0.675319。

我正在使用自定义库进行集成,它将在给定时间重复查询函数值,按固定步骤,比如说0.05。我必须在那时为它提供函数的值。

例如:前5个查询将是0,0.05,0.1,0.15,0.2,所有这些都应返回0.459344

如何在没有重复搜索的情况下以最佳方式实现这一目标?

编辑:输入和输出格式的澄清。

我必须创建一个应该花时间作为输入的函数,并输出函数值。

输入时间可以是浮点数,因为时间步长约为0.05。

对于Eg:

让我们假设我已经创建了一个功能FunF,它可以实现我想要的功能。

这将由外部库调用

FunF(0) - # This should return 0.459344
FunF(0.05) - # This should return 0.459344
FunF(0.1) - # This should return 0.459344
FunF(0.15) - # This should return 0.459344
 ...
 ...
 ...
FunF(2.95) - # This should return 0.459344
FunF(3) - # This should return 0.675319
FunF(3.05) - # This should return 0.675319

等等。

我需要编写FunF函数。

python pandas
1个回答
1
投票

我认为你将列与值x进行比较并得到最后一个True值的行 - 例如通过iatvalues

def FunF(x):
    return df.loc[(df['t'] <= x), 'f'].iat[-1]

替代方案:

def FunF(x):
    return df.loc[df['t'] <= x, 'f'].values[-1]


print (FunF(0))
0.459344
print (FunF(0.1))
0.459344
print (FunF(2.95))
0.459344

print (FunF(3))
0.675319
print (FunF(3.1))
0.675319
print (FunF(8))
0.554812
print (FunF(9))
0.554812
© www.soinside.com 2019 - 2024. All rights reserved.