简体   繁体   English

Python 找到 dataframe 中某个值的最近邻

[英]Python find closest neighbors to a value in a dataframe

I have a dataframe or list.我有一个 dataframe 或列表。 I want to find the closest values and their index to a given value.我想找到最接近给定值的值及其索引。

My code:我的代码:

df = pd.DataFrame({'num':[20,24,35,38]})

val = 26 

val_idx = df.iloc[(df['num']-val).abs().argsort()[:2]]

Present output (val_idx):目前 output (val_idx):

    num
1   24
0   20

Expected output (val_idx):预期 output (val_idx):

    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)
import pandas as 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

upper = {k:v for k,v in dic.items() if v >= val}
# {2: 35, 3: 77, 4: 33, 8: 38, 9: 43}
uppest_index = max(upper,key=upper.get)
# 2

lower = {k:v for k,v in dic.items() if v <= val}
# {0: 20, 1: 6, 5: 24}
lowest_index = min(lower,key=lower.get)
# 3
idx = [lowest_index, uppest_index] # [3,2]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM