【问题标题】:Index range based on condition基于条件的索引范围
【发布时间】:2021-03-31 07:33:41
【问题描述】:

我有如下熊猫数据框:

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   

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

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

其实我有一百万个账号,如果有什么建议或者开始的点,请帮帮我。

【问题讨论】:

    标签: python pandas dataframe group-by conditional-statements


    【解决方案1】:

    使用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-07-07
      • 2019-10-07
      • 1970-01-01
      • 2011-11-15
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      相关资源
      最近更新 更多