[英]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.