【问题标题】:How to use apply and lambda functions on set of filtered rows如何在一组过滤行上使用 apply 和 lambda 函数
【发布时间】:2020-06-29 19:51:40
【问题描述】:

在使用 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 函数的计算值等于深度等于2!

提前致谢!

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

【问题讨论】:

    标签: python pandas lambda apply where-clause


    【解决方案1】:

    戴维斯, 错误“缺少 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)
    

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      • 2017-08-20
      • 1970-01-01
      相关资源
      最近更新 更多