根据多个其他列查找正负 bin 限制

Find positive and negative bin limits based on multiple other columns

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

   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

我的objective是

a) 为var_name的每个值求s_value >=0[的上限和下限(raw_val) =22=]

b) 为var_name的每个值求s_value <0[=的上限和下限(raw_val) 22=]

我尝试了以下

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)

请注意,我的真实数据是大数据,var_name 列有 200 多个唯一值。对于 var_name 列的每个值,正值和负值 (s_value) 的分布可能不均匀。在示例 df 中,我展示了正值和负值的均匀分布,但在现实生活中可能并非如此。

我希望我的输出如下所示

var_name sign  low_limit   upp_limit
 Qty     neg     120          388
 F1      neg     110          1000
 Qty     pos     34            45
 Qty     pos     318          419

我认为 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