Python 如何对数据帧中的每一行进行排序并获取索引?
我有一个包含概率的数据框。我需要的是一个新的数据帧,其中每一行都包含已排序行的索引。例如:Python 如何对数据帧中的每一行进行排序并获取索引?,python,pandas,dataframe,sorting,Python,Pandas,Dataframe,Sorting,我有一个包含概率的数据框。我需要的是一个新的数据帧,其中每一行都包含已排序行的索引。例如: 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 我知道如何使用多个循环之类的困难方法来完成
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
我知道如何使用多个循环之类的困难方法来完成。我找到了对排序值的引用,但没有返回索引的“排序”函数。有什么建议吗?您可以将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)
输出新的\u 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)
使用
.index
在排序后获取每列的索引(确保不在原位),然后构建所需的数据帧!第二排的2,1,0是怎么来的?是不是应该是1,2,0?@anky:他只是在定义df
时有一个输入错误(输出表明df[1][1]
是0.5
,而不是示例中所述的0.7
)。我可能会做df.transform(lambda s:np.argsort(-s.values),axis=1)
@Anky,我明白你的意思了,确实是打字错误。很抱歉