繁体   English   中英

如何对 pandas dataframe 中的每一行进行排序并获取索引?

[英]How to sort each row in pandas dataframe and get indices instead?

我有一个包含概率的 pandas DataFrame。 我需要的是一个新的 DataFrame ,其中每一行都包含已排序行的索引。 例子:

df = pd.DataFrame([[0.5,0.7,0.1],[0.1,0.7,0.5]])
df
     0    1    2
0  0.5  0.7  0.1
1  0.1  0.7  0.5

new_df = some sort operation on df
new_df
    0  1  2
0   1  0  2
1   2  0  1

我知道如何使用多个循环等以艰难的方式做到这一点。 我发现对排序值的引用,但没有返回索引的“排序” function。 有人有什么建议吗?

您可以将 numpy 与 argsort 一起使用:

df = pd.DataFrame([[0.5,0.7,0.1],[0.1,0.7,0.5]])
array = df.values.argsort(axis=1)[:,::-1]
new_df  = pd.DataFrame(array)

output new_df

    0   1   2
0   1   0   2
1   1   2   0

笔记:

正如@anky 所评论的那样,在您显示的输出中有些东西没有意义,我还假设您想要降序,这就是结果中的[:,::-1]切片的原因/

更新

正如@anky 在此处的评论中所建议的那样,它仍然使用与 argsort 相同的想法,这是比df.values.argsort(axis=1)[:,::-1]更直接的解决方案:

np.argsort(-df)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM