gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:28:39 25 4
gpt4 key购买 nike

我有这个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com