Python 3.x 基于多列的数据帧的条件映射

Python 3.x 基于多列的数据帧的条件映射,python-3.x,pandas,dataframe,numpy,mapping,Python 3.x,Pandas,Dataframe,Numpy,Mapping,我有一个数据框架,需要根据基于值的条件将类别映射到两个单独的列上。要执行此操作的行总数约为一百万 示例数据帧是: df = pd.DataFrame({'col1':['B','A','A','B','C','B','C','C','A'], 'col2':[10,30,40,20,60,30,70,80,50]}) 现在,True的条件是: A:>30 B:>20 C:>60 如果col2中的值符合上述条件,则结果为真(1),否则为假(0) 预期结果是:

我有一个数据框架,需要根据基于值的条件将类别映射到两个单独的列上。要执行此操作的行总数约为一百万

示例数据帧是:

df = pd.DataFrame({'col1':['B','A','A','B','C','B','C','C','A'],
               'col2':[10,30,40,20,60,30,70,80,50]})
现在,True的条件是:

  • A:>30
  • B:>20
  • C:>60
  • 如果col2中的值符合上述条件,则结果为真(1),否则为假(0)

    预期结果是:

        col1    col2    result
    0   B   10  0
    1   A   30  0
    2   A   40  1
    3   B   20  1
    4   C   60  0
    5   B   30  1
    6   C   70  1
    7   C   80  1
    8   A   50  1
    

    我试着这样做:

    df['result'] = np.select([(df['col1']=='A') & (df['col2']>30),
                          (df['col1']=='A') & (df['col2']<=30),
                          (df['col1']=='B') & (df['col2']>10),
                          (df['col1']=='B') & (df['col2']<=10),
                          (df['col1']=='C') & (df['col2']>60),
                          (df['col1']=='C') & (df['col2']<=60),
                         ],
                         [True,
                          False,
                          True,
                          False,
                          True,
                          False
                         ]
                        )
    
    df['result']=np.选择([(df['col1']='A')&(df['col2']>30),
    (df['col1']='A')和(df['col2']10),
    (df['col1']='B')和(df['col2']60),
    
    (df['col1']='C')&(df['col2']您可以通过
    为位
    链接掩码:

    df['result'] = (df['col1']=='A') & (df['col2']>30) |
                   (df['col1']=='B') & (df['col2']>10) | 
                   (df['col1']=='C') & (df['col2']>60)
    
    或:

    df['result'] = np.where((df['col1']=='A') & (df['col2']>30) |
                            (df['col1']=='B') & (df['col2']>10) | 
                            (df['col1']=='C') & (df['col2']>60), 1, 0)