[英]Python/ Pandas If statement inside a function explained
any
方法将评估pandas.Series
或pandas.DataFrame
的任何元素是否为True
。 非空 integer 被评估为True
。 因此,本质上, if z.any() > 1
,您将该方法返回的True
与1
integer 进行比较。
您需要直接调节pandas.Series
将返回boolean pandas.Series
,您可以安全地应用any
方法。
对于all
方法,这将是相同的。
def balh(a, b):
z = a + b
if (z > 1).any():
return z + 1
else:
return z
正如@arhr 清楚地解释的那样,问题是对z.any()
的错误调用,当z
中至少有一个非零元素时,它返回True
。 它导致True > 1
是False
表达式。
避免 if 语句和自定义 function 调用的单行替代方法如下:
df['col3'] = df.iloc[:, :2].sum(1).transform(lambda x: x + int(x > 1))
这将获取 dataframe 中的前两列,然后对每一行的元素求和,并根据 lambda function 转换新列。
iloc
也可以省略,因为 dataframe 仅用两列col1
和col2
实例化,因此该行可以重构为:
df['col3'] = df.sum(1).transform(lambda x: x + int(x > 1))
示例 output:
col1 col2 col3
0 1 3 5
1 2 4 7
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.