简体   繁体   中英

Index range based on condition

I have the pandas dataframe like below:

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  

I want to result like this:

  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   

I want to rank order after the specific value found and changed by account otherwise, it will return 12 . For example, the specific value is 2 , if any value that greater than or equal to 2 will be consider. In account A , it found 2 at index 2, the index will be change to 0 and any value after that less than 2 will be ranked order starting at 1 .

In account B , there is no value greater than or equal to 2 , the results return 12 .

In fact, I have like a million account, if there is any suggestion or point to start of, please help me.

Use cumsum to find your groups, and cumcount to fill them in.


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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM