繁体   English   中英

Python/ Pandas If 语句在 function 中解释

[英]Python/ Pandas If statement inside a function explained

我有以下示例,但我不明白为什么它不起作用。

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)

Output:

在此处输入图像描述

我预期的grater将在col3中看到57而不是46 ,因为46大于1并且我的意图是如果a + b grater 1add 1

any方法将评估pandas.Seriespandas.DataFrame的任何元素是否为True 非空 integer 被评估为True 因此,本质上, if z.any() > 1 ,您将该方法返回的True1 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 > 1False表达式。

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

df['col3'] = df.iloc[:, :2].sum(1).transform(lambda x: x + int(x > 1))

这将获取 dataframe 中的前两列,然后对每一行的元素求和,并根据 lambda function 转换新列。

iloc也可以省略,因为 dataframe 仅用两列col1col2实例化,因此该行可以重构为:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM