熊猫函数错误:系列的真值不明确

时间:2019-05-24 10:02:29

标签: pandas series

我有一个函数可以与数据框中的日期进行比较,并在基本计算后返回一个值:

def SDate(x,y):
    s=1
    a = min(x,y)
    b = max(x,y)
    if a !=x: s = -1
    r = b-a
    if b-a > 182:
        r = 365-b+a 
    return(r * s) 

我尝试使用以下内容,但出现错误:

df['Result']= SDate(df['GL Date'].dt.dayofyear,df['Special Date'].dt.dayofyear )

但是我有一个

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

4 个答案:

答案 0 :(得分:0)

您以if(x < bkp) { y <- i1 + s1 * x } else { y <- (i1 + s1 * bkp) + s2 * (x - bkp) } x的形式给予熊猫系列。因此,函数min无法接收到该对象。由于我不知道您在做什么,所以无法在代码上解决该问题。

希望它能起作用。

答案 1 :(得分:0)

问题出在min/max个函数上,它们不适用于Series个对象。考虑使用此:

a = min(x.min(), y.min())
b = max(x.max(), y.max())

但是,然后将Series与一个数字if a != x:进行比较-也会失败。功能的目的是什么?

答案 2 :(得分:0)

我不确定您要实现的目标到底是什么,但是您似乎正在尝试将函数的输入设置为一系列并获取按行输出,这是不明智的,因为您希望输出位于数据框。

包括尝试使用的数据样本以及所需的输出内容,以及对要实现的内容的详细说明也是一种很好的做法。

话虽如此,根据您的描述-您应该将apply方法用作行操作来获取输出。

因此,如果您希望应用此功能:

def SDate(x,y):
    s=1
    a = min(x,y)
    b = max(x,y)
    if a !=x: s = -1
    r = b-a
    if b-a > 182:
        r = 365-b+a 
    return(r * s) 

您应该这样做:

df['Result'] = df.apply(lambda x: SDate(x['GL Date'].dt.dayofyear, x['Special Date'].dt.dayofyear), axis = 1)

答案 3 :(得分:0)

您可以尝试axis的{​​{1}}参数:

df.apply

当您将GL日期和特殊日期年份传递给函数时,实际上是传递了def SDate(row): s=1 year1=row['GL Date'].year year2= row['Special Date'].year a = min(year1,year2) b = max(year1,year2) if a !=year1: s = -1 r = b-a if b-a > 182: r = 365-b+a return(r * s) df['Result']= df.apply(SDate, axis=1) ,这是因为您无法比较Series与Series或{{ 1}}个运算符。因此结果是不明确的。无法确定哪个更大。因此,您得到的错误。

使用应用功能<时,它将逐行应用该功能。