簡體   English   中英

Pandas 滾動 window 等級順序與條件

[英]Pandas rolling window rank order with condition

我想我有 Pandas DataFrame 如下所示:

  account   amount  
  A         10      
  A         10      
  A         20      
  A         10      
  A         10      
  A         10      
  B         10      
  B         10      
  B         20      
  B         18      
  B         18      
  B         12      
  B         14      
  B         18      
  B         19      

我想要一個如下所示的新列:

  account   want  
  A         nan   
  A         nan   
  A         1     
  A         2     
  A         3     
  A         1     
  B         nan   
  B         nan   
  B         1     
  B         2     
  B         3     
  B         1     
  B         2     
  B         1     
  B         1     

這個想法是在給定 window 中找到最大值之后對順序(從 1 開始)進行排序。

例如,給定的 window 為3 ,在賬戶A中,最大金額為20 然后,索引2將返回1 ,因為20是給定 window 中的最大值。 之后,對於下一個滾動 window,在索引3處將返回2 ,因為數量為10 ,比上面的20少。

將邏輯應用於帳戶B ,結果如圖所示。 我可以考慮用 3 創建最大的滾動 window 數量,但我不能再做進一步了。

我想我可以通過下面的代碼解決這個問題:

def rank(window):
    newWindow = np.array(window)
    lastMax = np.where(newWindow == np.amax(newWindow))[0][-1]
    maxLocation = np.repeat(lastMax, newWindow.shape[0])
    location = np.arange(0, newWindow.shape[0])    
    ranks = location - maxLocation + 1
    return ranks[-1]

df['want'] = df.groupby('account')['amount'].rolling(window = 3).apply(rank).droplevel(0)

感謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM