python - 如何为具有多个数字列的给定 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 进行一些矢量化操作?
谢谢你。
解决方案
您可以使用转换/应用来点击每一列
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