如何为具有多个数字列的给定 pandas 数据框创建排名 table?

How do I create a rank table for a given pandas dataframe with multiple numerical columns?

我想创建一个基于多列 pandas 数据框的排名 table,其中包含多个数字列。

我们以下面的df为例:

Name Sales Volume Reviews
A 1000 100 100
B 2000 200 50
C 5400 500 10

我想创建一个新的 table、ranked_df,它按降序排列每列中的值,同时保持基本相同的格式:

Name Sales_rank Volume_rank Reviews_rank
A 3 3 1
B 2 2 2
C 1 1 3

现在,我可以通过遍历列来迭代执行此操作,即

df = pd.DataFrame{
"Name":['A', 'B', 'C'], 
"Sales":[1000, 2000, 5400], 
"Volume":[100, 200, 500], 
"Reviews":[1000, 2000, 5400]
}

# make a copy of the original df
ranked_df = df.copy()

# define our interested columns
interest_cols = ['Sales', 'Volume', 'Reviews']
for col in interest_cols:
    ranked_df[f"{col}_rank"] = df[col].rank()

# drop the cols not needed 
...

但我的问题是:是否有更优雅或 Pythonic 的方式来做到这一点?也许申请数据框?或者通过将其扔给 numpy 来进行一些矢量化操作?

谢谢。

您可以使用 transform/apply 来命中每一列

df.set_index('Name').transform(pd.Series.rank, ascending = False)

      Sales  Volume  Reviews
Name
A       3.0     3.0      1.0
B       2.0     2.0      2.0
C       1.0     1.0      3.0
df.set_index('Name').rank().reset_index()

    Name    Sales   Volume  Reviews
0   A       1.0     1.0     1.0
1   B       2.0     2.0     2.0
2   C       3.0     3.0     3.0