Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.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 - Fatal编程技术网

Python 如何根据包含所需顺序的预定义数组对数据帧中的值进行排序?

Python 如何根据包含所需顺序的预定义数组对数据帧中的值进行排序?,python,pandas,Python,Pandas,现在假设我有一个数据框,其中包含df数据框中每个元素所需的行位置。比如说, df = pd.DataFrame({'id': [1, 2, 3, 4, 5], 'p1': [0, 0, 1, 1, 2], 'p2': [9, 2, 3, 5, 3], 'p3': [1, 3, 10, 3, 7], 'p4': [4, 4, 7, 1, 10]}) df = df.set_index('id') df p1 p2 p3 p4 id 1

现在假设我有一个数据框,其中包含df数据框中每个元素所需的行位置。比如说,

df = pd.DataFrame({'id': [1, 2, 3, 4, 5],
 'p1': [0, 0, 1, 1, 2],
 'p2': [9, 2, 3, 5, 3],
 'p3': [1, 3, 10, 3, 7],
 'p4': [4, 4, 7, 1, 10]})

df = df.set_index('id')
df

    p1  p2  p3  p4
id                
1    0   9   1   4

2    0   2   3   4

3    1   3  10   7

4    1   5   3   1

5    2   3   7  10
如何根据order数组的元素对df dataframe元素进行排序

预期的结果是

 order=np.argsort(-df.values,axis=1)

order
array([[1, 3, 2, 0],  
       [3, 2, 1, 0],  
       [2, 3, 1, 0],  
       [1, 2, 0, 3],  
       [3, 2, 1, 0]], dtype=int64)

创建如图所示的映射器,然后可以执行以下操作:

    p1  p2  p3  p4
id                
1    9   4   1   0
2    4   3   2   0
3   10   7   3   1
4    5   3   1   1
5   10   7   3   2
您可以使用通过提供的“奇特”索引来创建数据数组,然后重新创建整个数据帧

mapper={0:'p1',1:'p2',2:'p3',3:'p4'}
df_copy=df.copy()
for index, row in df.iterrows():
    i=0
    for name, values in row.iteritems():

        df[name][index]=df_copy[mapper[order[index-1][i]]][index]
        i=i+1


你介意发布你的预期输出吗?我已经添加了预期输出。谢谢。这对你有用吗?我想要一个适用于任意顺序数组的方法。
pd.DataFrame(np.take_along_axis(df.to_numpy(), order, axis=1),
             index=df.index,
             columns=df.columns)
    p1  p2  p3  p4
id                
1    9   4   1   0
2    4   3   2   0
3   10   7   3   1
4    5   3   1   1
5   10   7   3   2