如何在筛选行集上使用apply和lambda函数

2024-10-01 07:38:21 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用pandas的Jupyter笔记本电脑中,我一直遇到一个问题,就是如何将一个函数应用于数据帧的一组过滤行

简而言之,我有一个大的数据帧(这里我缩小了它),我想在其中添加一个额外的列-R_mf-以及使用过滤行(例如深度大于1但小于3)创建的值,并应用一个函数(Rxo_mf9373+(T_aq+6.77)/(df['Temp']+6.77))。我已经定义了所需的变量Rxo_mf9373和T_aq。有人能告诉我代码有什么问题吗

T_aq = 188
Rxo_mf9373 = 0.06
df = pd.DataFrame({'DEPTH':[1,2,3,4,5], 'Temp':[0.5, 0.6, 0.7, 0.8, 0.9]})
df['R_mf'] = df.where((df['DEPTH']>1) & (df['DEPTH'] < 3)).apply(lambda x, T_aq, Rxo_mf9373: Rxo_mf9373 + (T_aq + 6.77) / (x['Temp'] + 6.77), axis = 1)

当我运行此命令时,会得到以下结果: ()缺少2个必需的位置参数:“T_aq”和“Rxo_mf9373”

最后,在上面的例子中,我想要得到一个输出,其中数据帧包含一个额外的列df['R_mf'],并且它只有一个来自第二行lambda函数的计算值,其中depth等于2

提前谢谢

这里是指向所需输出的链接 [1] :https://i.stack.imgur.com/fQIdU.png


Tags: 数据lambda函数代码pandasdf定义jupyter
1条回答
网友
1楼 · 发布于 2024-10-01 07:38:21

戴维斯, “缺少2个必需的位置参数”错误是因为lambda函数需要3个参数,但只接收一个。由于这些参数是常量,我建议您使用单变量函数以这种方式重写代码:

df = pd.DataFrame({'DEPTH':[1,2,3,4,5], 'Temp':[0.5, 0.6, 0.7, 0.8, 0.9]})
df['R_mf'] = df.loc[(df['DEPTH']>1) & (df['DEPTH'] < 3), 'Temp'].apply(lambda x: Rxo_mf9373 + (T_aq + 6.77) / x + 6.77)

更好的是——摆脱apply

df.loc[(df['DEPTH']>1) & (df['DEPTH'] < 3), 'R_mf'] = Rxo_mf9373 + (T_aq + 6.77) / df.loc[(df['DEPTH']>1) & (df['DEPTH'] < 3), 'Temp'] + 6.77)

相关问题 更多 >