首页 > 解决方案 > 在 Python 中使用带有多个参数的 min(, [, key])

问题描述

我想用来在 2 个对象min(, [, key])中找到与当前时间最接近的值,并捕获.current_timeleft_dataright_datacurrent_time

            left_data= df.loc[i-100:i-1, 'Timestamp']
            right_data= df.loc[i+1:i+100, 'Timestamp'] 

我使用的代码如下所示:

            data = min(left_data, right_data , key=lambda x: abs(x - current_time))

它发现了错误:

ValueError: Can only compare identically-labeled Series objects

在文档中它指出

The key argument specifies a one-argument ordering function like that used for list.sort()

是因为我使用了 2 个参数而不是 1 个吗?我怎样才能让 min(, [, key]) 工作的 2 个参数?


编辑: df看起来像:

    Timestamp                value    
0   2000-01-10 17:32:05.090 27.5  
1   2000-01-10 17:32:11.090 29.0
2   2000-01-10 17:32:15.090 31.0
3   2000-01-10 17:32:17.090 32.5
4   2000-01-10 17:32:19.090 34.0
5   2000-01-10 17:32:21.090 36.0
6   2000-01-10 17:32:23.090 37.5
7   2000-01-10 17:32:25.160 38.5
8   2000-01-10 17:32:27.160 39.5
9   2000-01-10 17:32:31.160 41.0

标签: pythonpandasnumpy

解决方案


一种使用方式numpy.hstack

i = 5
current_time = df.loc[i, 'Timestamp']
left_data= df.loc[i-100:i-1, 'Timestamp']
right_data= df.loc[i+1:i+100, 'Timestamp'] 

min(left_data.append(right_data) , key=lambda x: abs(x - current_time))

输出:

Timestamp('2000-01-10 17:32:19.090000')

如果你想要值:

i = 5
current_time = df.loc[i, "Timestamp"]
left_data= df.loc[i-100:i-1]
right_data= df.loc[i+1:i+100] 

min(left_data.append(right_data).to_numpy() , key=lambda x: abs(x[0] - current_time))[1]

输出:

34.0

推荐阅读