df1:
Variables left right
0 AUM -0.001 28.20
1 AUM 28.20 40.28
2 AUM 40.28 58.27
3 AUM 58.27 80.72
4 AUM 80.72 100.00
0 ABS -88.01 200.72
1 ABS 200.72 480.72
2 ABS 480.72 800.20
0 LS 10000 200000
1 LS 200000 400000
df2:
Pan_no ABS AUM LS
0 AAA 28 30 10001
2 CCC 500 98 390000
1 BBB 250 50 150000
3 DDD 100 60 380000
4 EEE 88 10 378347
条件:
根据df1中的左值和右值,在df2中创建一个新列,并将该列中的值设置为该特定变量的df1索引。
例如:如果在df2中,AUM值落在此范围内(-0.001 - 28.20),则新列将具有df1的索引值作为新值。即0。
同样地,
如果在df2中ABS值在此范围内(200.72 - 480.72),则新的ABS_BIN列将具有df1的索引值作为新值。即1。
我尝试过的方法是:
binning_vars = ['ABS','AUM','LS']
def f(row):
for i in binning_vars:
for j in df1[df1['Variable'] == i].index:
if df1[i] >= df1['left'] & df1[i] >= df1['right']:
value = j
else:
pass
return value
df2[i,'_bin'] = df1.apply(f, axis=1)
但是它会抛出一个错误,TypeError: 无法对 'float' 和 'float' 类型执行 & 操作。非常感谢您的任何帮助。
Expected Output:
with new columns in df2:
Pan_no ABS AUM LS ABS_BIN AUM_BIN LS_BIN
0 AAA 28 30 10001 0 1 0
1 BBB 250 50 150000 1 2 0
2 CCC 500 98 390000 2 4 1
3 DDD 100 60 380000 0 3 1
4 EEE 88 10 378347 0 0 1