rank data over a rolling window in pandas DataFrame

后端 未结 2 445
伪装坚强ぢ
伪装坚强ぢ 2020-12-20 19:16

I am new to Python and the Pandas library, so apologies if this is a trivial question. I am trying to rank a Timeseries over a rolling window of N days. I know there is a ra

2条回答
  •  渐次进展
    2020-12-20 20:01

    You can write a custom function for a rolling_window in Pandas. Using numpy's argsort() in that function can give you the rank within the window:

    import pandas as pd
    import StringIO
    
    testdata = StringIO.StringIO("""
    Date,A
    01-01-2013,100
    02-01-2013,85
    03-01-2013,110
    04-01-2013,60
    05-01-2013,20
    06-01-2013,40""")
    
    df = pd.read_csv(testdata, header=True, index_col=['Date'])
    
    rollrank = lambda data: data.size - data.argsort().argsort()[-1]
    
    df['rank'] = pd.rolling_apply(df, 3, rollrank)
    
    print df
    

    results in:

                  A  rank
    Date                 
    01-01-2013  100   NaN
    02-01-2013   85   NaN
    03-01-2013  110     1
    04-01-2013   60     3
    05-01-2013   20     3
    06-01-2013   40     2
    

提交回复
热议问题