我正在尝试将.apply()
与数据帧一起用作参数之一:
df.apply(func, axis=1, args=(df))
当我这样做时,我收到以下错误:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
这是功能:
def func(df):
new_val = df.loc[ \
(df["date"] == self.date + relativedelta(years=1)) & \
(df["indicator"] == self.indicator), "val"]
if (len(new_val) == 1):
new_val = list(new_val)[0] # Extract integer from series
self["updated_val"] = new_val - self.val
答案 0 :(得分:0)
好的,这里的问题是func
和apply
的组合。数据帧的apply
方法将给定函数应用于数据框中的每个COLUMN并返回结果。因此,传递给apply
的函数应该将pandas Series或数组视为输入,而不是数据帧。它应该提供一个序列/数组或单个值作为输出。
例如
df.apply(sum)
将sum
函数应用于每列,并提供包含该列的系列
每列的结果(通常你会为此做df.sum(),但我只是用它来说明这一点)。
其次,args
中的apply
参数仅在您传递的函数采用其他参数时使用(除了系列,应该是第一个参数)。例如,您可能有一个对数组求和的函数,然后除以某个数字(再次是一个愚蠢的例子):
def sum_div(array, divisor):
return sum(array) / divisor
您可能希望将此应用于divisor = 2的数据帧的每一列。 你会做的
df.apply(sum_div, args=[2])
我不确定你想要什么。只是func(df)
吗?