【问题标题】:python lambda not return correct valuepython lambda没有返回正确的值
【发布时间】:2021-06-25 07:35:38
【问题描述】:

我刚开始学习 lambda,为什么我只得到 1 条件而不是 2 ?还有没有办法把这段代码写得更短?

df['numup'] = (pn> pc)& (pn.shift(-1) < pc.shift(-1))
df['nump'] = df['numup'].apply(lambda x: '1' if x == 'true' else '0')
return : 
80    False
81     True
82    False
83    False
Name: numup, dtype: bool
80    0
81    0
82    0
83    0
Name: nump, dtype: object

如果我使用此代码,我会收到错误

df['numup'] = df.apply(lambda x: '1' if ((pn> pc)& (pn.shift(-1) < pc.shift(-1))) else '0')

【问题讨论】:

  • 因为值是True,而不是'true'...!?所以,'1' if x else '0'.

标签: python pandas


【解决方案1】:

您的第一组代码失败,因为x == 'true' 正在执行字符串检查您的熊猫系列中的值是否为字符串“true”,在您的情况下,它是一个布尔值。所以应该是lambda x: '1' if x else '0'

您的第二组代码失败,因为 (pn&gt; pc)&amp; (pn.shift(-1) &lt; pc.shift(-1)) 正在生成一个 pandas Series 而不是单个布尔值。

如果你想把它放在一行中,你可以结合你所拥有的,即将 df['numup'] 替换为 (pn&gt; pc)&amp; (pn.shift(-1) &lt; pc.shift(-1)) 或采取另一种方法:

((pn&gt; pc)&amp; (pn.shift(-1) &lt; pc.shift(-1))).astype(int)

https://pandas.pydata.org/docs/reference/api/pandas.Series.astype.html

【讨论】:

  • 你能举例说明如何在 lambda 中制作布尔值吗?
  • 你这是什么意思?如果您不知道什么是布尔值,则意味着它是具有 True 或 False 值的对象。见:w3schools.com/python/python_booleans.asp
  • 也许我的问题不清楚。在您的 canswer 中,您说我的第二组代码失败,因为它返回熊猫系列而不是布尔值,这就是我问您是否可以给我一个示例(如果有的话)将 lambda 内部的比较转换为布尔值,以便我可以使代码更短更清晰,而不是我必须输入df['numup'] = (pn&gt; pc)&amp; (pn.shift(-1) &lt; pc.shift(-1)) df['nump'] = df['numup'].apply(lambda x: '1' if x == 'true' else '0') 2行代码,我可以制作1行代码。
  • 我已经编辑了我的答案,以提供一种方法,您可以在一行中以合理的长度做到这一点,但它不涉及 lambda。您可以使用astype 直接将布尔系列转换为整数系列
猜你喜欢
  • 1970-01-01
  • 2014-11-26
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多