Python在数据帧中查找与值最近的邻居
我有一个数据框或列表。我想找到与给定值最接近的值及其索引 我的代码:Python在数据帧中查找与值最近的邻居,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框或列表。我想找到与给定值最接近的值及其索引 我的代码: df = pd.DataFrame({'num':[20,24,35,38]}) val = 26 val_idx = df.iloc[(df['num']-val).abs().argsort()[:2]] 当前输出(val_idx): 预期输出(val_idx): 将熊猫作为pd导入 df=pd.DataFrame([20,35,33,24,38,43],columns=['num']) dic=df.to_dic
df = pd.DataFrame({'num':[20,24,35,38]})
val = 26
val_idx = df.iloc[(df['num']-val).abs().argsort()[:2]]
当前输出(val_idx):
预期输出(val_idx):
将熊猫作为pd导入
df=pd.DataFrame([20,35,33,24,38,43],columns=['num'])
dic=df.to_dict()['num']
# {0: 20, 1: 35, 2: 33, 3: 24, 4: 38, 5: 43}
val=26
上限={k:v表示k,如果v>=val}
# {2: 35, 3: 77, 4: 33, 8: 38, 9: 43}
uppest_index=max(上限,键=upper.get)
# 2
lower={k:v代表k,v在dic.items()中如果v请用df
的正确定义编辑你的帖子,我也相信你应该用val
而不是input
?和val_idx
而不是idx
?@Julien我编辑了我的q。在上面的列表中,26更接近24,35。我很惊讶你选择了20,35。不,我的意思是20。26最接近24和20,而不是2024和35。@恐怕我不明白这个问题,您是否试图找到前两个值并返回它们的索引,给定一个val
?因为26和24之间的距离是2,26和35之间的距离是9,20和26之间的距离只有6。
num
1 24
0 20
num
2 35
1 24
import numpy as np
import pandas as pd
# setup
df = pd.DataFrame({'num':[20,24,35,38]})
val = 26
# subtract to get differences
test = np.absolute(np.subtract(val, df["num"]))
# get index
idx = np.argmin(test)
# Condition
idx = np.where(df["num"][idx] > val, [idx-1, idx], [idx, idx+1])
print(idx)