【问题标题】:Lambda expression with && python带有 && python 的 Lambda 表达式
【发布时间】:2021-09-30 17:53:02
【问题描述】:

我正在尝试使用 lambda 表达式来提取具有两个条件的日期。 当我写这篇文章时,它可以工作

newdf.loc[lambda newdf: newdf['yearly_premium'] > 2784, :]

但是当我添加另一个条件时它不会:/

newdf.loc[lambda newdf: newdf['yearly_premium'] > 2784 and newdf['Total_Claim_Amount'] < 1021.654, :]

谁能告诉我如何调整它?谢谢各位

【问题讨论】:

  • 你为什么要在这里使用 lambda 表达式?完全没有意义
  • 无论如何,“它不起作用”并不是一个充分的问题描述。它是如何完全工作的?对于此类问题,您必须提供minimal reproducible example。如果您遇到错误,请发布包含堆栈跟踪的完整错误消息。

标签: python python-3.x lambda dataset conditional-statements


【解决方案1】:

lambda 函数传递给DataFrame.loc 时,表达式必须计算为布尔数组。可以使用布尔运算符指定单个表达式中的多个条件,以便整个表达式的评估也是一个布尔数组,例如:

lambda newdf: (newdf['yearly_premium'] > 2784) & (newdf['Total_Claim_Amount'] < 1021.654)

请注意,每个条件都用括号括起来。这是因为默认的 Python 评估顺序不会产生您期望的结果。

示例

import pandas as pd

df = pd.DataFrame({'x': [1, 2, 3], 'y': [3, 4, 5]})
newdf = df.loc[lambda df: (df['x'] > 1) & (df['y'] < 5)]

print(df)
print(newdf)

输出

   x  y
0  1  3
1  2  4
2  3  5

   x  y
1  2  4

关于使用lambda的注意事项

值得注意的是,在此特定用例中不需要 lambda 函数。在前面的例子中,直接使用标签也可以达到同样的效果,例如:

newdf = df.loc[(df['x'] > 1) & (df['y'] < 5)]

有关其他文档,请参阅 Indexing and selecting data

【讨论】:

  • 您可能应该注意到... lambda 表达式在这里真的毫无意义
  • 添加了关于使用lambda的说明。
猜你喜欢
  • 2012-05-14
  • 2017-04-05
  • 2013-07-02
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多