python——用lambda函数替换for循环

https://blog.csdn.net/chenkfkevin/article/details/71090664

场景如下:

现在有一个dataframe,其中一列为score,值从0-100,

df:

score

98

88

37

68

86

33

现在需要增加一列level,给这些分数分类,90分以上为A,60-90为B,60以下为C。

常用的方法肯定是使用for循环,对每一行进行处理。

 

[python] view plain copy
 
  1. import pandas as pd  
  2.   
  3. list = [98,88,37,68,86,33]  
  4.   
  5. df = pd.DataFrame(list, columns=['score']) # convert list to dataframe  
  6.   
  7. df['level'] = '' # add a column  
  8.   
  9. def judgeLevel(df):  
  10.     for i in range(len(df)):  
  11.         if df.score.ix[i] < 60:  
  12.             df.level.ix[i] = 'C'  
  13.         elif df.score.ix[i] > 90:  
  14.             df.level.ix[i] = 'A'  
  15.         else:  
  16.             df.level.ix[i] = 'B'  
  17.     return df  
  18.   
  19. df = judgeLevel(df)  

 

还有一种方法,是使用python的匿名函数:lambda函数

 

[python] view plain copy
 
  1. import pandas as pd  
  2.   
  3. list = [98,88,37,68,86,33]  
  4.   
  5. df = pd.DataFrame(list, columns=['score'])  
  6.   
  7. df['level'] = '' # add a column  
  8.   
  9. def judgeLevel(df):  
  10.     if df['score'] < 60:  
  11.         return 'C'  
  12.     elif df['score'] > 90:  
  13.         return 'A'  
  14.     else:  
  15.         return 'B'  
  16.   
  17. df['level'] = df.apply(lambda r: judgeLevel(r), axis=1)  
posted on 2018-04-23 19:37  guolongnv  阅读(1803)  评论(0)    收藏  举报