代码之家  ›  专栏  ›  技术社区  ›  The Great

根据多个其他列查找正面和负面仓位限制

  •  3
  • The Great  · 技术社区  · 3 年前

    我有一个如下所示的数据帧

       ID   raw_val  var_name   constant   s_value   
       1    388       Qty        0.36       -0.032   
       2    120       Qty        0.36       -0.007
       3    34        Qty        0.36       0.16
       4    45        Qty        0.36       0.31
       1    110       F1         0.36       -0.232   
       2    1000      F1         0.36       -0.17
       3    318       F1         0.36       0.26
       4    419       F1         0.36       0.31
    

    我的目标是

    a) 找出(的)上限和下限 raw_val )对于每个 var_name 对于 s_value >=0

    b) 找出(的)上限和下限 原价 )对于每个 var_名称 对于 s_值 <0

    我试过下面的方法

    df['sign'] = np.where[df['s_value']<0, 'neg', 'pos']
    s = df.groupby(['var_name','sign'])['raw_val'].series
    df['buckets'] = pd.IntervalIndex.from_arrays(s)
    

    请注意,我的真实数据是大数据,有超过200个独特的价值观 var_名称 柱正负值的分布( s_值 )对于每个值的 var_名称 柱。在示例df中,我展示了pos和neg值的均匀分布,但现实生活中可能并非如此。

    我希望我的输出如下

    var_name sign  low_limit   upp_limit
     Qty     neg     120          388
     F1      neg     110          1000
     Qty     pos     34            45
     Qty     pos     318          419
    
    1 回复  |  直到 3 年前
        1
  •  3
  •   jezrael    3 年前

    我想 numpy.where 使用聚合最小值和最大值的方式:

    df['sign'] = np.where(df['s_value']<0, 'neg', 'pos')
    df1 = (df.groupby(['var_name','sign'], sort=False, as_index=False)
             .agg(low_limit=('raw_val','min'), upp_limit=('raw_val','max')))
    print (df1)
      var_name sign  low_limit  upp_limit
    0      Qty  neg        120        388
    1      Qty  pos         34         45
    2       F1  neg        110       1000
    3       F1  pos        318        419