我有pandas
个数据框:
artist track class1 class2 class3
0 Portishead Roads 0.00 1.00 0.0
1 Yo La Tengo Our Way to Fall 0.14 0.86 0.0
2 Radiohead Fake Plastic Trees 0.03 0.97 0.0
和这两个用户输入变量:
input_value = 0.80
input_class = 'class2'
从那些我希望迭代数据帧的变量,
在所选input_value
中找到与class2
最接近的值,并重新排序数据帧行,如下所示:
artist track class1 class2 class3
1 Yo La Tengo Our Way to Fall 0.14 0.86 0.0
2 Radiohead Fake Plastic Trees 0.03 0.97 0.0
0 Portishead Roads 0.00 1.00 0.0
其中class2值的接近程度决定了行的顺序。
(0.86
最接近0.80
,0.97
秒,等等......)
到目前为止,我只找到了最接近的值,使用以下代码:
for col in df.ix[:,'class1':'class3']:
if col == input_class:
print min(df[col] - input_value)
但我离目标还有点远。谁能指出我正确的方向?
答案 0 :(得分:3)
尝试iloc
差异+ df = df.iloc[(df[input_class] - input_value).argsort()]
df
artist track class1 class2 class3
1 Yo La Tengo Our Way to Fall 0.14 0.86 0.0
2 Radiohead Fake Plastic Trees 0.03 0.97 0.0
0 Portishead Roads 0.00 1.00 0.0
:
np.argsort
或者,您可以使用df = df.iloc[np.argsort(df[input_class] - input_value)]
df
artist track class1 class2 class3
1 Yo La Tengo Our Way to Fall 0.14 0.86 0.0
2 Radiohead Fake Plastic Trees 0.03 0.97 0.0
0 Portishead Roads 0.00 1.00 0.0
来达到同样的效果。
reset_index
使用df.result.reset_index(drop=1)
artist track class1 class2 class3
0 Yo La Tengo Our Way to Fall 0.14 0.86 0.0
1 Radiohead Fake Plastic Trees 0.03 0.97 0.0
2 Portishead Roads 0.00 1.00 0.0
重新排序索引。
{{1}}