Python:创建新的dataframe列,显示相对于其他列值的排名

Python:创建新的dataframe列,显示相对于其他列值的排名,python,pandas,Python,Pandas,python中的原始数据帧: date cash hy equity 0 2003-01-31 1 3 4 1 2003-01-31 2 5 1 2 2003-01-31 1 6 3 目标:创建三个新列,将每个资产类别相对于其他两个资产类别进行排序。0=最低回报资产类别。2=最高回

python中的原始数据帧:

    date       cash  hy    equity  
0  2003-01-31   1    3       4                    
1  2003-01-31   2    5       1                     
2  2003-01-31   1    6       3              

目标:创建三个新列,将每个资产类别相对于其他两个资产类别进行排序。0=最低回报资产类别。2=最高回报资产类别

    date       cash  hy    equity  cash_rank    hy_rank    equity_rank
0  2003-01-31   1    3       4          0        1            2
1  2003-01-31   2    5       1          1        2            0
2  2003-01-31   1    6       3          0        2            1

我使用的代码如下:

x = [2, 5, 1]
arranged = sorted(x)

sorted_list =  []

for i in x:
    sorted_list.append(arranged.index(i))

这将返回新的排序_列表=[1,2,0],这是第二行中资产类返回的顺序


我不知道如何使用dataframe.apply()方法或任何其他方法将此应用于列组列。

您可以
apply
rank

df = df.join(df.loc[:,'cash':].apply(pd.Series.rank,1).sub(1).add_suffix('_rank'))
df
Out[145]: 
         date  cash  hy  equity  cash_rank  hy_rank  equity_rank
0  2003-01-31     1   3       4        0.0      1.0          2.0
1  2003-01-31     2   5       1        1.0      2.0          0.0
2  2003-01-31     1   6       3        0.0      2.0          1.0
太快了!很好的回答:)+1