如何在python中使用多列排列行
假设我有以下数据帧,我需要在 新列(我的意思是,如果我想排名4行,我将创建4个新行) 在下面的数据框中,我有三个数字列,我需要对每一行进行比较和排序,有三行,所以我需要创建三个新列来比较每一列中的值与该行的值如何在python中使用多列排列行,python,pandas,python-2.7,dataframe,ranking,Python,Pandas,Python 2.7,Dataframe,Ranking,假设我有以下数据帧,我需要在 新列(我的意思是,如果我想排名4行,我将创建4个新行) 在下面的数据框中,我有三个数字列,我需要对每一行进行比较和排序,有三行,所以我需要创建三个新列来比较每一列中的值与该行的值 Revenue-SaleCount-salesprices-ranka-rankb-rankc 300------10-----------8000--------2--------1-----3 100----9000-----------1000--------1--------3
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)
我们可以用
string.ascii_小写字母编写一个循环,并使每个列的轴=1
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
注意我使用了只有Python版本>3.4才支持的f-string
。
否则请使用.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]
我们可以用string.ascii_小写字母编写一个循环,并使每个列的轴=1
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
注意我使用了只有Python版本>3.4才支持的f-string
。
否则请使用.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]
我看不出你在比较行,你在每行中比较列。这是正确的吗?假设它是一个excel,我说的是将每一个单元格与同一行上的其他单元格进行比较,并创建一个新的列-编辑-在previus代码中,我有3个列,所以我将创建3个新列。我看不到你比较行,你在这里比较每行中的列。是这样吗?假设这是一个excel,我说的是将同一行中的每个单元格与其他单元格进行比较,并创建一个新的列-编辑-在previus代码中,我有3个列,因此我将创建3个新列Hanks Erfan先生,我如何使列降低,我最后将更改什么code@MohamedAbass我认为.rank()
具有升序=False
,使用相同的值。:)请我不能修改代码,我需要像这样重命名新列。RevenuUpperRank,salecountUpperRank,SalesPrice SupperRank。换句话说,我需要“column+(upperrank)”到新的column问Erfan先生,我如何使排名下降,我最终会改变什么code@MohamedAbass我认为.rank()
具有升序=False
,使用相同的:请我不能修改代码,我需要像这样重命名新列。RevenuUpperRank,salecountUpperRank,SalesPrice SupperRank。换句话说,我需要将“column+(upperrank)”添加到新列