pandas是一个强大的数据处理库,其中 apply 是一个非常有用的函数,它允许我们对 DataFrame 或 Series 进行自定义操作。

我们可以用DataFrame的apply函数实现对多列、多行的操作。可通过axis设置参数,设为1是对列进行操作,参数axis设为0是对行操作。apply经常跟lambda一起使用,非常方便,大大提高了效率。
构造数据
import pandas as pd
data = [
['张三', '专科', '湖北', '22','2021-06-29'],
['李四', '本科', '河北', '23','2022-06-29'],
['王五', '硕士', '北京', '29','2019-03-21'],
['赵六', '博士', '内蒙', '30','2022-06-25'],
['吴七', '本科', '内蒙', '25','2023-06-25'],
['范八', '本科', '吉林', '25','2022-06-25'],
['陈九', '本科', '湖北', '25','2023-06-25'],
['郑十', '本科', '湖北', '25','2022-06-25'],
]
df = pd.DataFrame(data, columns=['姓名', '学历', '籍贯', '年龄','毕业时间'])
df
单列操作
假如我只想知道毕业时间的年份,新增一列数据获取毕业时间的年份。
df['毕业年份']=df['毕业时间'].apply(lambda x :x[:4])
df
多列关联操作
假设有1岗位,需本科以上学历,年龄小于28才能匹配。现在用两种方法来实现这个需求。
方法1
#定义函数
def f(a,b):
if a in ['本科','硕士','博士']and int(b)<28:
return '匹配'
else:
return '不匹配'
df['是否匹配岗位-方法1']=df.apply(lambda x: f(x['学历'],x['年龄']),axis=1)#axis=1,表示横向,对列进行操作,axis=0表示竖向操作,是增加一行
df
方法2
方法2是更常见的方法,现在用更常见的方法解决这个需求。
def f2(x):
if x['学历'] in ['本科','硕士','博士'] and int(x["年龄"]) <28:
return '匹配'
else:
return '不匹配'
df['是否匹配岗位-方法2']=df.apply(f2,axis=1)#axis=1,表示横向,对列进行操作,axis=0表示竖向操作,是增加一行
df
方法2是万能方法,对于非常复杂的函数也可以通过方法2的方式实现。
多行关联操作
展示一下行操作,行之间的操作用的较少,这里主要展示与列操作的区别。axis=0与axis=1的区别。
#定义函数
def f3(a,b):
return a+b
df.loc[6]=df.apply(lambda x: f3(x[1],x[5]),axis=0)#axis=1,表示横向,对列进行操作,axis=0表示竖向操作,增加一行
df
熟悉本文pandas中的apply使用的几个案例,就能很方便地实现pandas数据中的行列变换。
本文参考了我之前的几篇文章,并对内容进一步总结,感兴趣的可以参阅之前的文章。
链接如下:
深入了解Pandas的map、apply、applymap函数