Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使用多列排列行_Python_Pandas_Python 2.7_Dataframe_Ranking - Fatal编程技术网

如何在python中使用多列排列行

如何在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

假设我有以下数据帧,我需要在 新列(我的意思是,如果我想排名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)

我们可以用
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)”添加到新列