Using conditional to generate new column in pandas dataframe

前端 未结 5 1897
-上瘾入骨i
-上瘾入骨i 2020-11-29 02:26

I have a pandas dataframe that looks like this:

   portion  used
0        1   1.0
1        2   0.3
2        3   0.0
3        4   0.8

I\'d

5条回答
  •  爱一瞬间的悲伤
    2020-11-29 02:28

    Use np.where, is usually fast

    In [845]: df['alert'] = np.where(df.used == 1, 'Full', 
                                     np.where(df.used == 0, 'Empty', 'Partial'))
    
    In [846]: df
    Out[846]:
       portion  used    alert
    0        1   1.0     Full
    1        2   0.3  Partial
    2        3   0.0    Empty
    3        4   0.8  Partial
    

    Timings

    In [848]: df.shape
    Out[848]: (100000, 3)
    
    In [849]: %timeit df['alert'] = np.where(df.used == 1, 'Full', np.where(df.used == 0, 'Empty', 'Partial'))
    100 loops, best of 3: 6.17 ms per loop
    
    In [850]: %%timeit
         ...: df.loc[df['used'] == 1.0, 'alert'] = 'Full'
         ...: df.loc[df['used'] == 0.0, 'alert'] = 'Empty'
         ...: df.loc[(df['used'] >0.0) & (df['used'] < 1.0), 'alert'] = 'Partial'
         ...:
    10 loops, best of 3: 21.9 ms per loop
    
    In [851]: %timeit df['alert'] = df.apply(alert, axis=1)
    1 loop, best of 3: 2.79 s per loop
    

提交回复
热议问题