如何按索引对数据框的列进行排名?大熊猫

时间:2017-04-21 16:05:04

标签: python-3.x pandas jupyter-notebook

假设您有以下Dataframe(它更复杂)

df4=pd.DataFrame(np.matrix([[1,5],[3,2],[4,3],[5,4],[2,1]]),index=['a','b','c','d','e'])

哪个已经排名,但是,我想按行索引对其进行排名,以达到所需的数据框

df5=pd.DataFrame(np.matrix([['a','e'],['e','b'],['b','c'],['c','d'],['d','a']]))

这样做有简单的方法吗?

非常感谢

2 个答案:

答案 0 :(得分:4)

df4作为索引器传递给df4

pd.DataFrame(df4.index[df4-1])

请注意,我从df4中减去1,因为Pandas索引是基于零的,但您的DataFrame似乎是1。

结果输出:

   0  1
0  a  e
1  c  b
2  d  c
3  e  d
4  b  a

答案 1 :(得分:0)

我想根据索引对矩阵进行排名。我认为发布的解决方案不适合我的问题

我必须写一个公式来回答这个问题

def Column_rank_based_list(f):
    r,c=f.shape
    B= array(range(r*c), dtype='a5').reshape(r,c)
    for j in range(c):
        for i in range(r):
            B[f.ix[i,j]-1,j]=f.index[i]
    return pd.DataFrame(B, columns=f.columns)

但是,我遇到了困难,因为它是在条目之前打印b。

例如

df4=pd.DataFrame(np.matrix([[1,5],[3,2],[4,3],[5,4],[2,1]]),index=['a','b','c','d','e'])

你会得到

Column_rank_based_list(df4)