使用pandas dataframe在排序后输出排名

3

这是我的数据框。

Date        CA  KY  ID  CO
2003-01-31  5   -6   7   1
2003-02-28  6    2  -2  -5
2003-03-31  3   -8   4  -1

我想知道如何获得以下DataFrame作为输出。我知道这不是argsort(),因为它只会按顺序给出索引。

Date        CA  KY  ID  CO
2003-01-31  2    0   3   1
2003-02-28  3    2   1   0
2003-03-31  2    0   3   1

如果我想按降序排列它们,该怎么做?我猜列数减去数值列就可以了。

请解释一下你想要做什么。 - gtomer
我正在尝试对每一行进行排序,但是在DataFrame中放置已排序列表的索引而不是原始项目。 - grumpycylon
1
但是有些行有重复(CA:2,3,2),而有些行没有0或1(再次CA)。 - gtomer
1个回答

4
df.rank(axis=1, method='first')

返回值:

             CA KY  ID  CO
Date                
2003-01-31  3.0 1.0 4.0 2.0
2003-02-28  4.0 3.0 2.0 1.0
2003-03-31  3.0 1.0 4.0 2.0

如果您想完全相同,可以执行以下操作:

df.rank(axis=1, method='first') - 1

            CA  KY  ID  CO
Date                
2003-01-31  2.0 0.0 3.0 1.0
2003-02-28  3.0 2.0 1.0 0.0
2003-03-31  2.0 0.0 3.0 1.0

要按降序排列:

df.rank(axis=1, method='first', ascending=False)

1
添加了 method='first',在行中存在重复值的情况下是必需的。 - Shubham Sharma
@ShubhamSharma 我们不知道他想如何处理重复项。这就是为什么我使用默认值的原因。 - Billy Bonaros
1
没错,但为了保险起见,method='first'会处理重复项 :) - Shubham Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接