python - 根据列值对数据框行重新排序

标签 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'

从这些变量中我想迭代数据框, 在所选 class2 中找到与 input_value 最接近的值,并对数据帧行重新排序,如下所示:

        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)

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

最佳答案

尝试 argsort 的差异 + 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

关于python - 根据列值对数据框行重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46556434/

相关文章:

python - 检查 10 个不同集合之间的共同元素

r - 将一个非空的 data.frame 与一个空的合并时的奇怪行为

python - Django 是 MVC 还是 MVT 框架?

python - 如何在Python中实现类似C# RSACryptoServiceProvider的加密?

python - Jupyter Notebook 在一段时间不活动后变得无响应,不登录到终端

python - pandas 行操作仅保留每行最右边的非零值

python - 有什么方法可以像 Python 或 PHP 一样在 NodeJS 中包含/需要文件吗?

python - 允许数据帧 "amount"列中的最后一行作为插 header value 以解决舍入误差

python - 如果同一行的另一列中存在 null,则将列值与前一行连接起来

dataframe - 重命名 PySpark DataFrame 聚合的列