【问题标题】:ranking dataframe by multiple columns and assigning the ranks按多列对数据框进行排名并分配排名
【发布时间】:2017-10-03 10:53:29
【问题描述】:

我正在尝试对所有列中的值逐一进行排名,并将排名分配给第一列中的值['Tickers'] 并且最好将这些排名存储在新的数据框中 所以假设我有这个数据框:

    Ticker  P/E     P/S     P/B     P/FCF      Dividend
No.                     
1   GWRE    433.03  10.15   5.54    47.25       0.0000
2   NTCT    419.51  2.83    1.32    24.30       0.0000
3   PEGA    136.61  4.77    10.43   308.60      0.0026
4   BLKB    90.62   5.14    14.84   43.35       0.0060
5   IRM     80.69   2.66    4.89    100000.00   0.0624

那么我会按市盈率排名(最低值排名第 1),然后将结果编号放入新数据帧中

然后再次查看其余的列,最后新的数据框看起来像这样(除了最高值排在第 1 位的被除数列之外,所有的排名都相同):

 Ticker   P/E  P/S  P/B   P/FCF  Dividend
No.                     
1   GWRE    5   5   3     3       4
2   NTCT    4   2   1     1       4
3   PEGA    3   3   4     4       3
4   BLKB    2   4   5     2       2
5   IRM     1   1   2     5       1

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您需要rank 方法:

    # get columns start with P
    p_cols = df.columns[df.columns.str.startswith("P")]
    
    # rank P columns in ascending order
    df[p_cols] = df[p_cols].rank(method="dense"))
    
    # rank Dividend column in descending order
    df['Dividend'] = df.Dividend.rank(method="dense", ascending=False)
    

    如果您更喜欢新的数据框,可以使用pd.concat 构造一个新的:

    pd.concat([df.Ticker,
               df.filter(regex="^P").rank(method="dense"),
               df.Dividend.rank(method="dense", ascending=False)], 
              axis=1)
    

    【讨论】:

      猜你喜欢
      • 2011-11-12
      • 2019-12-31
      • 2019-08-31
      • 2018-12-12
      • 2020-04-23
      • 2018-06-25
      • 2010-11-20
      相关资源
      最近更新 更多