基于条件的索引范围

Sas*_*cha 4 python group-by conditional-statements dataframe pandas

我有如下所示的熊猫数据框:

account   have  
  A         0     
  A         1     
  A         2     
  A         1     
  A         1     
  A         2     
  A         0     
  A         1     
  A         1     
  B         0     
  B         0     
  B         0     
  B         0     
  B         0     
  B         1     
  B         1     
  B         1     
  B         1  
Run Code Online (Sandbox Code Playgroud)

我想要这样的结果:

  account   have  
  A         12    
  A         12    
  A         0     
  A         1     
  A         2     
  A         0     
  A         1     
  A         2     
  A         3     
  B         12    
  B         12    
  B         12    
  B         12    
  B         12    
  B         12    
  B         12    
  B         12    
  B         12   
Run Code Online (Sandbox Code Playgroud)

我想在找到并更改的特定值之后进行排序,account否则,它将返回12. 例如,具体值为2,如果有任何大于或等于的值2将被考虑。在 account 中A,它2在索引 2 处找到,该索引将更改为,0之后的任何值2都将从 开始排名1

在帐户中B,没有大于或等于的值2,结果返回12

事实上,我有一百万的帐户,如果有任何建议或起点,请帮助我。

use*_*203 6

使用cumsum找到您的组,cumcount以填补他们进来。


m = df["have"].ge(2).groupby(df["account"]).cumsum()
df.groupby([df["account"], m]).cumcount().where(m.ne(0), 12)

0     12
1     12
2      0
3      1
4      2
5      0
6      1
7      2
8      3
9     12
10    12
11    12
12    12
13    12
14    12
15    12
16    12
17    12
dtype: int64
Run Code Online (Sandbox Code Playgroud)