函数中的Python/If语句已解释

函数中的Python/If语句已解释,python,pandas,function,if-statement,Python,Pandas,Function,If Statement,我有下面的例子,我无法理解为什么它不起作用 import pandas as pd d = {'col1': [1, 2], 'col2': [3, 4]} df = pd.DataFrame(data=d) def balh(a, b): z = a + b if z.any() > 1: return z + 1 else: return z df['col3'] = balh(df.col1, df.col2) 输出:

我有下面的例子,我无法理解为什么它不起作用

import pandas as pd

d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)

def balh(a, b):
    z = a + b
    if z.any() > 1:
        return z + 1
    else:
        return z

df['col3'] = balh(df.col1, df.col2)
输出:


我的预期输出是查看
col3
中的
5
7
而不是
4
6
,由于
4
6
1
更大,我的意图是
添加
1
如果
a+b
1
更大,那么
任何
方法都将评估
熊猫系列
熊猫数据框
中的任何元素是否为
True
。非空整数的计算结果为
True
。因此,本质上是通过
if z.any()>1
将方法返回的
True
1
整数进行比较

您需要直接调节
pandas.Series
,它将返回一个
布尔pandas.Series
,您可以安全地应用
任何
方法

这与
all
方法相同

def balh(a,b):
z=a+b
如果(z>1)。任何()
返回z+1
其他:
返回z

any
方法将评估
pandas.Series
pandas.DataFrame
中的任何元素是否为
True
。非空整数的计算结果为
True
。因此,本质上是通过
if z.any()>1
将方法返回的
True
1
整数进行比较

您需要直接调节
pandas.Series
,它将返回一个
布尔pandas.Series
,您可以安全地应用
任何
方法

这与
all
方法相同

def balh(a,b):
z=a+b
如果(z>1)。任何()
返回z+1
其他:
返回z

正如@arhr清楚解释的那样,问题是对
z.any()
的调用不正确,当
z
中至少有一个非零元素时,它返回
True
。它产生了一个
True>1
,这是一个
False
表达式

避免if语句和自定义函数调用的单行替代方法如下:

df['col3']=df.iloc[:,:2].求和(1).变换(λx:x+int(x>1))
这将获取数据帧中的前两列,然后对每行的元素求和,并根据lambda函数转换新列

iloc
也可以省略,因为数据帧只实例化了两列
col1
col2
,因此该行可以重构为:

df['col3']=df.sum(1).transform(λx:x+int(x>1))
示例输出:

   col1  col2  col3
0     1     3     5
1     2     4     7

正如@arhr清楚解释的那样,问题是对
z.any()
的调用不正确,当
z
中至少有一个非零元素时,它返回
True
。它产生了一个
True>1
,这是一个
False
表达式

避免if语句和自定义函数调用的单行替代方法如下:

df['col3']=df.iloc[:,:2].求和(1).变换(λx:x+int(x>1))
这将获取数据帧中的前两列,然后对每行的元素求和,并根据lambda函数转换新列

iloc
也可以省略,因为数据帧只实例化了两列
col1
col2
,因此该行可以重构为:

df['col3']=df.sum(1).transform(λx:x+int(x>1))
示例输出:

   col1  col2  col3
0     1     3     5
1     2     4     7