【发布时间】:2020-01-15 16:40:08
【问题描述】:
我正在尝试在应用程序中构建一个 lambda 函数:
- 检查输入的列表是否在另一个列表中
- 如果存在,则将值附加到同一数据框中的另一列
例子:
初始数据框:
id list_1 list_2
1 [1,2,3] []
2 [1,2,4] []
3 [1,3,4] []
现在,我想检查[1,2] 是否存在于list_1 中。如果是,请将test 附加到list_2 列表中。
final_dataframe:
id list_1 list_2
1 [1,2,3] ['test']
2 [1,2,4] ['test']
3 [1,3,4] []
这是我的第一次尝试:
df.apply(lambda row: row['list_2'].append(['test' if all(elem in [1,2] for elem in row['list_1'])]), axis = 1)
但我收到invalid systax 错误。我觉得这可能很简单,但我不知道是什么问题
这是完整的错误:
File "<ipython-input-126-f45b74393598>", line 3
movies_test.apply(lambda row: row['displayable'].append(['comedy_drama' if all(elem in ['comedy','drama'] for elem in row['test'])]), axis = 1)
^
SyntaxError: invalid syntax
【问题讨论】:
-
无效的语法错误通常会准确地指出您需要修复的地方。分享完整的错误回溯,以便我们查看。无论哪种方式,这个函数对于 lambda 来说都太长了,而且完全不可读。代码不应该不惜一切代价放在一行中,如果您能真正阅读代码,您将有更好的时间进行调试。
-
那是公平的,写它的时候看起来很简单,但我想它有点失控了。会建议我构建一个单独的函数并将其传递给我的应用函数吗?
-
我愿意,是的。此外,您收到错误的原因是因为您有一个没有和
else的单行 if 语句 - 您不能这样做
标签: python pandas lambda apply