函数中的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