根据列值重新排序数据帧行

时间:2017-10-04 03:13:26

标签: python pandas dataframe

我有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.800.97秒,等等......)

到目前为止,我只找到了最接近的值,使用以下代码:

for col in df.ix[:,'class1':'class3']:
    if col == input_class:
        print min(df[col] - input_value)

但我离目标还有点远。谁能指出我正确的方向?

1 个答案:

答案 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}}