如何用列名而不是值创建秩矩阵?

2024-03-29 09:40:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python很陌生。 我有一个如下的数据框

       book 1      book 2     book 3  
user 1  0.05       0.47       0.09
user 2  0.3        0.01       0.35

我希望根据值(降序)对其进行排序,输出如下:

        Rank 1      Rank 2      Rank 3 
user1   book 2      book 3      book 1
user2   book 3      book 1      book 2  

this is how the matrix looks in real task

我会感激你的帮助。你知道吗

谢谢你。你知道吗


Tags: the数据排序isthismatrixhowrank
3条回答
new_cols = {'book %i' % i: 'Rank %i' % i for i in range(1, df.shape[1]+1)}
df.apply(lambda s: s.index[s.argsort()][::-1], axis=1).rename(new_cols, axis=1)

退货

        Rank 1  Rank 2  Rank 3
user 1  book 2  book 3  book 1
user 2  book 3  book 1  book 2

您可以使用apply:

(
     df.apply(lambda x: x.sort_values().index[::-1], axis=1)
     .rename(columns=lambda x: x.replace('book','Rank'))
)
Out[9]: 
        Rank 1  Rank 2
user 1  book 2  book 1
user 2  book 1  book 2

这里有一种方法。你知道吗

pandas.DataFrame([df.columns[x] for x in np.argsort(-df.values)], 
                 index=df.index, 
                 columns=['rank' + str(i + 1) for i in range(df.shape[1])])

       rank1  rank2
user1  book2  book1
user2  book1  book2

相关问题 更多 >