首页 > 解决方案 > Pandas Lambda 函数无法正常工作

问题描述

我有一个数据框,但标题可以动态更改,因此我将 i.loc 用于第 4 列以后。

我的工作代码是:

cv.iloc[:,[4]] = cv['Allocation'].apply(lambda x: x if dt.strptime(dates[0], "%Y-%m-%d") <= dt.strptime('2021-12-31', "%Y-%m-%d") else 0)

如果我列表中的第一个日期 <= 公式中的固定日期,这将应用 cv['Allocation'] 的内容。

但是,我想做的是将固定日期交换为我想要的 Panda 列:

cv.iloc[:,[4]] = cv['Allocation'].apply(lambda x: x if dt.strptime(dates[0], "%Y-%m-%d") <= cv['Allocation Completion Date'] else 0)

如果我这样做,我会得到: 'ValueError:一个系列的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

标签: pandaslambda

解决方案


dt.strptime(dates[0], "%Y-%m-%d") <= cv['Allocation Completion Date']返回一系列布尔值。

所以,试试np.where

cond = dt.strptime(dates[0], format="%Y-%m-%d")  <= cv['Allocation Completion Date']
cv.iloc[:,[4]] = np.where(cond, cv['Allocation'], 0)

推荐阅读