Pandas中使用apply调用函数

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函数

apply函数的用法




请使用浏览器的分享功能分享到微信等