假设我有以下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)
答案 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]