【问题标题】:How to apply a function with several dataframe columns as arguments?如何应用具有多个数据框列作为参数的函数?
【发布时间】:2021-12-29 17:02:11
【问题描述】:

我正在尝试根据其他列和我创建的函数计算 pandas 数据框中的新列。而不是使用 for 循环,我更喜欢将函数应用于整个数据框列。

我的代码是这样的:

    df['po'] = vect.func1(df['gra'],
                           Se, 
                           df['p_a'], 
                           df['t'], 
                           Tc)

其中 df['gra']、df['p_a'] 和 df['t'] 是我的数据框列(参数),Se 和 Tc 是其他(实际)参数。 df['po'] 是我的新专栏。

func1 是我的 vect 包中描述的一个函数。 这个函数是:

def func1(g, surf_e, Pa, t, Tco):

    if (t <= Tco):
        pos = (g-(Pa*surf_e*g))
    else: 
        pos = 0.0
    return(pos)

当以这种方式实现时,我收到一条错误消息,涉及以下行:if (t

错误是: ValueError: Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

我阅读了 pandas 文档,但没有找到解决方案。谁能解释一下是什么问题?

我尝试使用 apply

例如:

df['po'] = df['gra'].apply(vect.func1)

但我不知道如何将 apply 与多个列一起用作参数。

提前谢谢你。

【问题讨论】:

    标签: python pandas dataframe function


    【解决方案1】:

    np.where 与所需条件一起使用,条件为 True 时的值和默认值。

    df['po'] = np.where(
        df['t'] <= Tc,                               # Condition
        df['gra'] - (df['P_a'] * Se * df['gra']),    # Value if True
        0                                            # Value if False
    )
    

    编辑:

    别忘了import numpy as np

    此外,您会收到一个错误,因为您将一个系列与一个系列进行比较 因此获得一系列布尔值而不是原子布尔值 if 条件需要的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 2021-12-12
      • 2020-02-01
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多