【问题标题】:Conditional mapping to a dataframe based on multiple columns基于多列的数据帧的条件映射
【发布时间】:2021-07-09 05:02:10
【问题描述】:

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

示例数据框是:

df = pd.DataFrame({'col1':['B','A','A','B','C','B','C','C','A'],
               'col2':[10,30,40,20,60,30,70,80,50]})

现在,True 的条件是:

  1. 答:>30
  2. 乙:>20
  3. C:>60

如果col2中的值符合上述条件,则结果为True(1),否则为False(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

【问题讨论】:

    标签: python-3.x pandas dataframe numpy mapping


    【解决方案1】:

    您可以通过| 将掩码链接为按位OR

    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)
    

    【讨论】:

      【解决方案2】:

      我尝试这样做:

      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
                           ]
                          )
      

      但是,我不知道这是否是执行此操作的最佳方式。欢迎其他答案。

      【讨论】:

        猜你喜欢
        • 2018-04-05
        • 2023-03-21
        • 2021-11-26
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多