带条件的滚动窗口排序

2024-09-25 00:26:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想我的数据框架如下所示:

  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     

其思想是在给定窗口中找到的最大值之后排列顺序(从1开始)

例如,给定的窗口是3,在帐户A中,最大金额是20。然后,索引2将返回1,因为20是给定窗口中的最大值。在这之后,对于下一个滚动窗口,at索引3将返回2,因为数量是10,从上面看小于20

将逻辑应用于accountB,结果如图所示。我可以考虑用3创建最大数量的滚动窗口,但我不能做得更远


Tags: 数据框架数量顺序帐户account逻辑nan
1条回答
网友
1楼 · 发布于 2024-09-25 00:26:07

我想我可以通过下面的代码来解决这个问题:

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)

谢谢大家

相关问题 更多 >