如何根据另一个数据框中的条件在数据框中创建新列?

泰米尔语
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
莫兹韦

您可以使用merge_asof来避免使用apply

out = df2.merge(
 pd.merge_asof((df2.melt(id_vars='Pan_no')
                   .astype({'value': float})
                   .sort_values(by='value')
                ),
               df1.reset_index().sort_values(by='left'),
               left_by='variable', right_by='Variables',
               left_on='value', right_on='left', direction='backward')
  .pivot(index='Pan_no', columns='variable', values='index')
  .add_suffix('_BIN'),
    left_on='Pan_no', right_index=True
)

输出:

  Pan_no  ABS  AUM      LS  ABS_BIN  AUM_BIN  LS_BIN
0    AAA   28   30   10001        0        1       0
2    CCC  500   98  390000        2        4       1
1    BBB  250   50  150000        1        2       0
3    DDD  100   60  380000        0        3       1
4    EEE   88   10  378347        0        0       1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

语言:如何根据另一个数据框在数据框中创建新列?

根据与另一个数据框的匹配在数据框中创建新列

根据另一个数据框中的日期条件创建新列

在数据框中创建一个新变量,条件是另一个数据框

熊猫:根据另一个数据框中的值在数据框中添加新列

根据另一个数据框的行值在数据框中添加新列

根据与另一个数据框中的值匹配的行数创建新列

如何根据另一个数据框条件替换数据框列中的值

如何根据另一个数据框中的日期时间条件从数据框中选择列的值?

根据另一个数据框中的列在一个数据框中创建新列

使用 R 中另一个数据框中的值在数据框中创建新变量

根据另一个数据框中的值在数据框中创建列表列

根据另一个数据框/列表在数据框中的列子集

R-根据另一个数据框的列中的值满足的条件,在数据框列中添加值(由公式得出)

在数据框中添加新列以对另一个数据框中的行进行计数

根据在另一个数据框中找到的范围在数据框中填充列

使用R中另一个数据框的值在数据框中创建列

根据另一个数据集中的列值在一个数据框中创建列

根据 R 中的列名创建一个包含来自另一个数据框中的列的新数据框

根据 r 中另一个数据框中的出现次数创建新列

根据条件从另一个数据框中复制列值

根据条件将数据框中的列除以另一个数据框的列的值?

如何根据R中另一个数据框中的列删除列数据框中的行?

熊猫根据另一个数据框中的匹配列填充新的数据框列

根据另一个数据框列的唯一值创建一个新的数据框

使用 R 中另一个数据框的条件组总和创建新列

在数据框中对具有某些条件的每列的值求和以创建另一个数据框

如何根据另一个数据框中的列的存在来更新数据框中列的值

根据python中另一个数据框的2列过滤数据框