2016-07-30 31 views
-3

所以我是新來的編碼和工作通過從Kaggle的泰坦尼克號數據集。數據框中有列有「年齡」和「性別」的列。我想創造一個有4個數值表示不同事物的新列: 0:16歲或以上的男性 1:16歲或以上的女性 2:15歲或15歲以下的男性 3:15歲或15歲以下的女性如何在函數中返回多個值(Python)?

到目前爲止,我已經得到了這個,但是這只是把它分成3個值,而不是我要找的4個。

def person_detail(Person): 
    Age, Sex = Person 
    return 2 if Age < 16 else Sex 

然後我應用功能的「年齡」和「性別」欄來獲得一個新列。我知道你不能有兩個回報,但是如果它得到我想要完成的東西,它會看起來像下面的東西。

def person_detail(Person): 
    Age, Sex = Person 
    return 2 if Age < 16 and Sex == 0 
    return 3 if Age < 16 and Sex == 1 else Sex 

在此先感謝。 「性別」一欄中的參考文獻0是男性,1是女性。

+0

@ NotBad4U - 回答這個問題的標題,但不幸的是,這個標題似乎與實際問題無關,所以它不是重複的。這個問題基本上是「我如何使用'elif'語句?」。 – TigerhawkT3

回答

2

只需使用if...else聲明。我猜你想要的是:

def person_detail(Person): 
    Age, Sex = Person 
    if Age<16: 
     return 3 if Sex else 2 
    else: 
     return Sex 
+0

或者,嵌套的三元表達式如'return(3如果Sex else 2)if Age <16 else Sex',但我認爲「long」if/else實際上更具可讀性。 –

+0

非常感謝,我想我很厚,但是你能解釋一下「如果性別2返回3」嗎?從本質上來說,代碼是如何得到的,我希望3歲以下的16歲以下的女性和2歲以下的16歲以下的男性? – giantsrock28

0

,您可以使用多個if語句,一個if-else語句或字典:

d = {(0, 0): 0, (0, 1): 1, (1, 0): 2, (1, 1): 3} 

def person_detail(Person): 
    Age, Sex = Person 
    return d[Age < 16, Sex] 
+1

這可能會縮短代碼,但不會更具可讀性。 –

+0

我只想給OP介紹一種方法,它可以用於解決更多可能結果的類似問題(當使用越來越多的if-then-else語句會變得一團糟時)。 – Domme

+0

這很好,但至少在目前的形式下,很難理解。我建議將dict移動到函數中,給它一個合適的名稱,並明確第一部分是布爾值:'outcome = {(False,1):0,...} –

0

在我看來,你應該只使用一個「長」 if/else正如@miindlek所建議的那樣,使功能的不同結果清晰可見。此外,我會建議不僅要return Sex,還要返回1 if Sex else 0,再次確切地說明函數返回的內容。

如果你希望有一個很短的return行,你也可以使用一個三元的語句,像這樣:

return Sex + 2 if Age < 16 else Sex 

甚至更​​短(而不是更容易理解):

return (Age < 16) * 2 + Sex