Python equivalent of Excel's PERCENTILE.EXC

后端 未结 2 2039
孤独总比滥情好
孤独总比滥情好 2020-12-19 15:36

I am using Pandas to compute some financial risk analytics, including Value at Risk. In short, to compute Value at Risk (VaR), you take a time series of simulated portfolio

2条回答
  •  长情又很酷
    2020-12-19 16:13

    It won't be as efficient as Pandas' own percentile but it should work:

    def quantile_exc(ser, q):
        ser_sorted = ser.sort_values()
        rank = q * (len(ser) + 1) - 1
        assert rank > 0, 'quantile is too small'
        rank_l = int(rank)
        return ser_sorted.iat[rank_l] + (ser_sorted.iat[rank_l + 1] - 
                                         ser_sorted.iat[rank_l]) * (rank - rank_l)
    
    ser = pd.Series([15,14,18,-2,6,-78,31,21,98,-54,-2,-36,5,2,46,-72,3,-2,7,9,34])
    
    quantile_exc(ser, 0.05)
    Out: -77.400000000000006
    
    quantile_exc(ser, 0.1)
    Out: -68.399999999999991
    
    quantile_exc(ser, 0.3)
    Out: -2.0
    

    Note that Excel fails for small percentiles; it is not a bug. It is because ranks that go below the minimum value is not suitable for interpolation. So you might want to check if rank > 0 in the quantile_exc function (see the assertion part).

提交回复
热议问题