如何使用多列中的熊猫在python上对行进行排名

时间:2019-04-20 18:01:30

标签: python pandas python-2.7 dataframe ranking

假设我有以下pandas数据框,并且我需要在以下位置对行进行排名 新列(我的意思是,如果我想对4行进行排名,则会创建4个新行)

在下面的数据帧中,我有三个数值列,我需要对每行进行比较和排序,有三行,因此我需要创建三列新列以将每个列中的值与该行进行比较

Revenue-SaleCount-salesprices-ranka-rankb-rankc

300------10-----------8000--------2--------1-----3

100----9000-----------1000--------1--------3-----2

我该如何使用简单的代码并使用for循环来做到这一点 预先感谢

import pandas as pd

df = pd.DataFrame({'Revenue':[300,9000,1000,750,500,2000,0,600,50,500],
    'Date':['2016-12-02' for i in range(10)],
    'SaleCount':[10,100,30,35,20,100,0,30,2,20],
    'salesprices':[8000,1000,500,700,2500,3800,16,7400,3200,21]})


print(df)

1 个答案:

答案 0 :(得分:2)

我们可以用string.ascii_lowercase编写一个循环,并在axis=1上用rank制作每一列

import string

cols = ['Revenue', 'SaleCount', 'salesprices']

for index, col in enumerate(cols):
    df[f'rank{string.ascii_lowercase[index]}'] = df[cols].rank(axis=1)[col]

输出:

print(df)
   Revenue        Date  SaleCount  salesprices  ranka  rankb  rankc
0      300  2016-12-02         10         8000    2.0    1.0    3.0
1     9000  2016-12-02        100         1000    3.0    1.0    2.0
2     1000  2016-12-02         30          500    3.0    1.0    2.0
3      750  2016-12-02         35          700    3.0    1.0    2.0
4      500  2016-12-02         20         2500    2.0    1.0    3.0
5     2000  2016-12-02        100         3800    2.0    1.0    3.0
6        0  2016-12-02          0           16    1.5    1.5    3.0
7      600  2016-12-02         30         7400    2.0    1.0    3.0
8       50  2016-12-02          2         3200    2.0    1.0    3.0
9      500  2016-12-02         20           21    3.0    1.0    2.0

注意:我使用了f-string,只有Python版本> 3.4才支持。 否则使用.format字符串格式,如下所示:

import string

cols = ['Revenue', 'SaleCount', 'salesprices']

for index, col in enumerate(cols):
    df['rank{}'.format(string.ascii_lowercase[index])] = df[cols].rank(axis=1)[col]