簡體   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