【问题标题】:Multiple conditionals in lambda function in pandas dataframe熊猫数据框中的 lambda 函数中的多个条件
【发布时间】:2020-04-16 00:18:42
【问题描述】:

我正在尝试通过 lambda 函数传递多个条件语句,在我的 pandas Dataframe 中创建一个新列。

我的问题和这个问题很相似:Lambda including if...elif...else 但该解决方案似乎不适用于我的 python (3.7) 版本。

这是我目前所拥有的:

在一个条件下,这是有效的:

ops['repair_location'] = ops['depot_name'].apply(lambda x: 'Field' if x == 'Field else 'Depot')

但我想添加另一个条件。使用链接问题的解决方案:

ops['repair_location'] = ops['depot_name'].apply(lambda x: 'Field' if x == 'Field' else (x == 'Unknown Location' 'Unknown Location' else 'Depot'))

这会返回指向最后一个else 语句的语法错误。

【问题讨论】:

  • 你打算用这个表达式做什么:x == 'Unknown Location' 'Unknown Location'?在任何情况下,您只有一个裸露的例外,这不是一个完整的条件表达式。你真的应该只使用一个完整的函数定义,这个 lambda 很快就会变得不可读

标签: python pandas lambda


【解决方案1】:

你可以使用 np.where

import numpy as np
ops['repair_location'] = (
    ops['depot_name']
    .apply(lambda x: np.where(x=='Field', 'Field', np.where(x=='Unknown Location', 'Unknown Location', 'Depot')))
)

【讨论】:

  • 我可以知道我们为什么在这里申请吗?
  • 这就是 OP 想要使用的东西,只是试图让它发挥作用。
【解决方案2】:

我们通常做 np.select

s1=ops['depot_name']=='Field'
s2=ops['depot_name']=='Unknown Location'
ops['repair_location']=np.select([s1,s2],['Field','Unknown Location'],default='Depot')

【讨论】:

  • depot_name 列的值在“字段”和“未知位置”之外。这会重写它并返回错误ValueError: invalid entry 0 in condlist: should be boolean ndarray
  • @Jacky 请再试一次错字'=='
猜你喜欢
  • 2022-01-02
  • 2020-10-14
  • 1970-01-01
  • 2017-08-21
  • 2019-02-26
  • 2019-07-31
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
相关资源
最近更新 更多