pandas中apply与lambda

lambda

lambda:输入是传入到参数列表x的值,输出是根据表达式(expression)计算得到的值。

比如:lambda x, y: xy    #函数输入是x和y,输出是它们的积xy

lambda x :x[-2:]     #x是字符串时,输出字符串的后两位

lambda x :func     #输入 x,通过函数计算后返回结果

lambda x:'%.2f' % x     # 对结果保留两位小数

apply

当想让方程作用在一维的向量上时,可以使用apply来完成,常常与lambda合用,如下所示,修改某列的字符,只保留后两位

df['time']=df['time'].apply(lambda x:x[-2:])

例:由一组dataframe数据,包括有数值型的三列气象要素,由这三列通过公式计算人体舒适指数

 

应用到的人体舒适指数计算公式:

import pandas as pd
import numpy as np
import math

path='data.csv'  #文件路径
data=pd.read_csv(path,index_col=0,encoding='gbk')  #读取数据有中文时用gbk解码

#定义舒适指数公式函数,结果保留1位小数
def get_CHB(T,RH,S):
    return round(1.8*T-0.55*(1.8*T-26)*(1-RH/100)-3.2*math.sqrt(S)+32,1)

#增加一列CHB并计算数据后赋值
data['舒适指数']=data.apply(lambda x:get_CHB(x['平均气温'],x['平均相对湿度'],x['2M风速']),axis=1)

#打印结果
print(data)

#保存结果
data.to_csv('D:\\CHB.csv',encoding='gbk')

代码中使用了apply和lambda的组合,传入的参数x为整个data数据,在函数中引入的参数则是x[‘平均气温’],x[‘平均相对湿度’],x[‘2M风速’],与自定义的函数get_CHB对应。最后需使用axis=1来指定是对列进行运算。

结果如图所示:

 

原文地址:https://www.cnblogs.com/coco2015/p/15736644.html