2016-07-30 4 views
-3

私はKaggleのタイタニックデータセットをコーディネートし、自分のやり方で作業しています。データフレームには、「年齢」と「性別」というラベルの列があります。 0::私は別のものを示す4つの値を持つ新しい列を作りたい男性は、15歳以下 3歳:女性16または2 歳以上:女性15歳以下関数(Python)で複数の値を返す方法は?

歳男性16または1 歳以上

これまで私はこれを得ましたが、これはちょうど3つの値に分割されています.4つの値ではありません。

次に、「年齢」列と「性別」列にこの機能を適用して、新しい列を取得します。私はあなたが2つのリターンを持つことはできないことを知っていますが、それが達成しようとしているものに遭遇すれば、それは以下のようになります。

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

また、Age <16 else Sexの場合は 'return(3ならば3 else else 2)のようなネストされた3進表現ですが、実際にはもっと長い" if/else "が読みやすいと思います。 –

+0

ありがとう、私は厚くなっていると思いますが、「セックス2なら3を返してください」と説明できますか?基本的に、私は16歳未満の女性3人、男性16人未満の男性2人が欲しいということは、このコードがどのようにわかりますか? – giantsrock28

0

文、ANの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

私はちょうどより多くの可能な結果(if-then-elseステートメントがますます混乱するようになる)を使用して同様の問題に使用できるメソッドをOPに導入したかったのです。 – Domme

+0

それは問題ありませんが、少なくとも現状では理解しにくいです。最初の部分がブール値であることを明確にすることをお勧めします: 'outcomes = {(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 
関連する問題