Series.apply()
回到主题, pandas 的 apply() 函数可以作用于 Series 或者整个 DataFrame,功能也是自动遍历整个 Series 或者 DataFrame, 对每一个元素运行指定的函数。
举一个例子,现在有这样一组数据,学生的考试成绩:
Name | Nationality | Score |
---|---|---|
张 | 汉 | 400 |
李 | 回 | 450 |
王 | 汉 | 460 |
如果民族不是汉族,则总分在考试分数上再加 5 分,现在需要用 pandas 来做这种计算,我们在 Dataframe 中增加一列。当然如果只是为了得到结果, numpy.where() 函数更简单,这里主要为了演示 Series.apply() 函数的用法。
对于 Nationality 这一列, pandas 遍历每一个值,并且对这个值执行 lambda 匿名函数,将计算结果存储在一个新的 Series 中返回。上面代码在 jupyter notebook 中显示的结果如下:
import pandas as pd
df = pd.read_csv("studuent-score.csv")
df['ExtraScore'] = df['Nationality'].apply(lambda x : 5 if x != '汉' else 0)
df['TotalScore'] = df['Score'] + df['ExtraScore']
lamba
lamba 的用法可以看成一个简要的函数,左边是参数,右边是以该参数返回的值(表达式),多与循环体连用。
Name | Nationality | Score | ExtraScore | TotalScore |
---|---|---|---|---|
张 | 汉 | 400 | 0 | 400 |
李 | 回 | 450 | 5 | 455 |
王 | 汉 | 460 | 0 | 460 |