pandas - 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()。
解决方案
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)
推荐阅读
- json - 如何在不使用 GridFS 的情况下在 MongoDB 中存储大型 JSON 文档(>20MB)
- html - 如何从 grails 视图文件夹中的 create.gsp 表单中隐藏几个字段?
- amazon-rds - Aurora Serverless Mysql 只读副本
- python - Sympy 代码中的空交集,但如果显式声明则有效
- android - 如何检查片段是否对用户可见
- kubernetes - 为什么我在集群中看不到工作节点?
- reinforcement-learning - QMIX(Multi-agent Reinforcement Learning) -> loss变成了nan
- javascript - 刷新时Quora像素问题
- linux - `find \( -perm -04000 -o -perm -02000 \)` 是什么意思
- django - 如何为注释django提供条件以返回布尔字段