根据多个其他列查找正负 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
我有一个如下所示的数据框
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