首页 > 解决方案 > 如何为具有多个数字列的给定 pandas 数据框创建排名表?

问题描述

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

让我们以下面的 df 为例:

姓名 销售量 体积 评论
一个 1000 100 100
2000 200 50
C 5400 500 10

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

姓名 销售排名 音量等级 评论排名
一个 3 3 1
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 
...

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

谢谢你。

标签: pythonpandasdataframerank

解决方案


您可以使用转换/应用来点击每一列

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

推荐阅读