python - Pandas 数据框 - 使用带有多个“if else”语句的 lambda 应用函数
问题描述
我希望有人可以帮助指出我在以下代码中可能做错了什么:
master_output['tm_override'] = master_output.apply(lambda row: row['nrec_tm_lb'].astype(str) + '-' + row['nrec_tm_ub'].astype(str) if row['det_tw_fact'].isin([4, 5]) else row['tw2Open'] + dt.timedelta(hours=3).time() if (row['det_tw_fact'].isin([1, 2, 3]) and (~row['tw2Open'].isna()))
else row['tw1Open'] + dt.timedelta(hours=3).time() if (row['det_tw_fact'].isin([1, 2, 3]) and (~row['tw2Open'].isna())), axis=1)
我有一种感觉,我可能在这里做一些根本上愚蠢的事情。问题似乎来自 'axis=1' 参数之前的最后一组括号 (')))')。
在此先感谢您的帮助!
解决方案
Nick ODell 的评论是正确的。我将您的原件重新格式化为:
master_output['tm_override'] = (
master_output.apply(lambda row: row['nrec_tm_lb'].astype(str) + '-' + row['nrec_tm_ub'].astype(str)
if row['det_tw_fact'].isin([4, 5])
else row['tw2Open'] + dt.timedelta(hours=3).time()
if (row['det_tw_fact'].isin([1, 2, 3]) and (~row['tw2Open'].isna()))
else row['tw1Open']
+ dt.timedelta(hours=3).time()
if (row['det_tw_fact'].isin([1, 2, 3]) and (~row['tw2Open'].isna())), axis=1)
)
如果您查看最后一个 if,则没有匹配的 else。您正在处理的是我相信是 DataFrame 吗?您正在尝试将值分配给列,但如果您只有 if 而没有 else,当不满足 if 条件时,则没有值可以填充该列。
我不知道您将在 else 部分中填写什么值。但我试过用''填充。语法错误消失了。
master_output['tm_override'] = (
master_output.apply(lambda row: row['nrec_tm_lb'].astype(str) + '-' + row['nrec_tm_ub'].astype(str)
if row['det_tw_fact'].isin([4, 5])
else row['tw2Open'] + dt.timedelta(hours=3).time()
if (row['det_tw_fact'].isin([1, 2, 3]) and (~row['tw2Open'].isna()))
else row['tw1Open']
+ dt.timedelta(hours=3).time()
if (row['det_tw_fact'].isin([1, 2, 3]) and (~row['tw2Open'].isna()))
else '', axis=1)
)
我现在得到的是一个不同的错误,因为我没有 DataFrame,但是您的语法错误已解决。
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-251-72ce849871e0> in <module>
1 master_output['tm_override'] = (
----> 2 master_output.apply(lambda row: row['nrec_tm_lb'].astype(str) + '-' + row['nrec_tm_ub'].astype(str)
3 if row['det_tw_fact'].isin([4, 5])
4 else row['tw2Open'] + dt.timedelta(hours=3).time()
5 if (row['det_tw_fact'].isin([1, 2, 3]) and (~row['tw2Open'].isna()))
NameError: name 'master_output' is not defined
推荐阅读
- jms - WildFly 是否提供了读取 JMS 重新发送/重试计数的属性?
- maven - Maven 到 Gradle 迁移 - 程序集插件 `includeBaseDirectory` 等效
- excel - 你如何总结多个组的单个最大值?
- html - 选择输入的自定义选项背景
- java - Android API 中的 HexDump 在哪里?
- vue.js - vue-cli 库构建中未考虑 Vuetify 选项
- bash - 多次管道输出到同一命令
- sql - 在表中更新之前检查值
- php - Mysql Range 动态带值
- sql-server - 在 MSSQL 中使用逗号和多条件拆分字符串