Pandas 函数错误:序列的真值不明确

Pandas 函数错误:序列的真值不明确,pandas,series,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.dayofy

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

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().

您正在以
x
y
的形式给出一个系列。因此,函数min不能接收这样的对象。因为我不知道你在那里做什么,所以我无法在代码上解决这个问题


希望它能工作。

问题是关于
min/max
函数,它们不适用于
系列
对象。考虑使用这个:

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

但是,然后将
系列
与一个数字进行比较:
如果是!=x:
–它也会失败。您的函数的用途是什么?

我不确定您到底想要实现什么,但看起来您试图将函数的输入设置为一个系列并获得行输出,这是不明智的,因为您希望输出位于数据帧中

最好的做法是包括您试图使用的数据样本和您希望输出的外观,以及您希望实现的更详细的解释

也就是说,根据您所描述的,您应该使用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)

您可以尝试
df的
参数。应用

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)
将总账日期和特殊日期年传递给函数时,实际上是在传递一个
系列
错误,因为您无法将系列值与
运算符进行比较。因此,结果是不明确的。哪个更大无法确定。这就是你所犯的错误


当您使用apply functions
axis=1
时,它会按行应用函数。

我需要传递数据帧每行的两个日期,以获得一个新列,其中包含函数结果,即到日期之间的距离。您是否应该使用数据帧?另外,您是否试图将总账日期和特殊日期的每个对应值与最小值和最大值进行比较?我在数据框的每一行中有两组日期。我需要为每一行传递从年初开始的天数,并应用函数返回这两个日期之间的较短距离(考虑到1月和12月之间我需要1个月,而不是11个月)。