Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对数据帧中的每一行进行排序并获取索引?_Python_Pandas_Dataframe_Sorting - Fatal编程技术网

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,我明白你的意思了,确实是打字错误。很抱歉