Create Column with ELIF in Pandas

前端 未结 4 889
轻奢々
轻奢々 2020-11-29 01:50

Question

I am having trouble figuring out how to create new DataFrame column based on the values in two other columns. I need to use if/elif/else l

相关标签:
4条回答
  • 2020-11-29 02:03

    Adding to np.where solution :

    df['col1']= np.where(df['col'] < 3, 1,np.where( (df['col'] >3 )& (df['col'] <5),2,3))
    

    Overall Logic is :

    np.where(Condition, 'true block','false block'). 
    

    With each true/false block can in turn again be nested.

    Also, Notice the & for ANDing! (not 'and')

    0 讨论(0)
  • 2020-11-29 02:10

    I tried the following and the result was much faster. Hope it's helpful for others.

    df['combo'] = 'other'
    df.loc[df['mobile'] == 'mobile', 'combo'] = 'mobile'
    df.loc[df['tablet'] == 'tablet', 'combo'] = 'tablet'
    
    0 讨论(0)
  • 2020-11-29 02:14

    ELIF logic can be implemented with np.select or nested np.where:

    import numpy as np
    
    df['combo'] = np.select([df.mobile == 'mobile', df.tablet == 'tablet'], 
                            ['mobile', 'tablet'], 
                            default='other')
    # or 
    df['combo'] = np.where(df.mobile == 'mobile', 'mobile', 
                           np.where(df.tablet == 'tablet', 'tablet', 'other'))
    

    Sample Data + Output:

       mobile  tablet   combo
    0  mobile     bar  mobile
    1     foo  tablet  tablet
    2     foo     nan   other
    3  mobile  tablet  mobile
    4  mobile     nan  mobile
    5     foo  tablet  tablet
    6  mobile     bar  mobile
    7  mobile  tablet  mobile
    8  mobile     bar  mobile
    9  mobile     nan  mobile
    
    0 讨论(0)
  • 2020-11-29 02:29

    In cases where you have multiple branching statements it's best to create a function that accepts a row and then apply it along the axis=1. This is usually much faster then iteration through rows.

    def func(row):
        if row['mobile'] == 'mobile':
            return 'mobile'
        elif row['tablet'] =='tablet':
            return 'tablet' 
        else:
            return 'other'
    
    df['combo'] = df.apply(func, axis=1)
    
    0 讨论(0)
提交回复
热议问题