4

我有如下的熊猫数据框:

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  

我想要这样的结果:

  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   

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

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

事实上,我有一个百万账户,如果有什么建议或开始的点,请帮助我。

4

1 回答 1

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
于 2020-12-21T14:46:06.810 回答