如何从 pandas DataFrame 中找到三个最接近的值?

How to find from a pandas DataFrame the three closest values?

我有一个包含不同情绪的数据框,每种情绪都是一个类别,具有三个不同的浮点值。我想找到最接近的情感给出三个值。


示例:

df_emotional = pd.DataFrame({
    'Category'  : ['anger', 'disgust', 'fear', 'guilt', 'joy', 'negative', 'positive', 'sadness', 'shame'],
    'n1'        : [0.167, 0.052, 0.073, 0.208, 0.980, 0.102, 0.959, 0.052, 0.060],
    'n2'        : [0.865, 0.775, 0.840, 0.567, 0.824, 0.527, 0.510, 0.288, 0.670],
    'n3'        : [0.657, 0.317, 0.293, 0.206, 0.794, 0.176, 0.855, 0.164, 0.155]
})

def closest_values(df, n1, n2, n3):
   n1_res = min(df, key=lambda x: abs(x - n1))
   ...
   return emotion

# Expected output
closest_values(df_emotional, n1=0.161, n2=0.991, n3=0.632)
output: anger

这里是一个用KNN方法实现的解决方案。请注意,我没有应用任何机器学习最佳实践,例如测试和训练拆分等。如果您有更大的数据集,则可以实施。基本上 Knn 计算行之间的 euclidean_distance 并选择最近的一个(你可以增加这个值)来决定类别。

import pandas as pd
from sklearn.neighbors import KNeighborsClassifier

df_emotional = pd.DataFrame({
    'Category'  : ['anger', 'disgust', 'fear', 'guilt', 'joy', 'negative', 'positive', 'sadness', 'shame'],
    'n1'        : [0.167, 0.052, 0.073, 0.208, 0.980, 0.102, 0.959, 0.052, 0.060],
    'n2'        : [0.865, 0.775, 0.840, 0.567, 0.824, 0.527, 0.510, 0.288, 0.670],
    'n3'        : [0.657, 0.317, 0.293, 0.206, 0.794, 0.176, 0.855, 0.164, 0.155]
    
})

X = df_emotional.iloc[:, 1:]
y = df_emotional.iloc[:, 0]


clf = KNeighborsClassifier(n_neighbors=1) #nearest 1 neighbor.
clf.fit(X,y)

clf.predict([[0.161, 0.991, 0.632]])

#Output:

array(['anger'], dtype=object) 

注意:您可以保存您的 clf 方法以供将来预测以获取更多信息:Model Persistence