2016-07-30 4 views
-3

Итак, я новичок в кодировании и прохожу через набор данных Titanic от Kaggle. В кадре данных есть столбцы с надписью «Возраст» и «Секс». Я хочу создать новую колонку, которая имеет 4 значения, которые указывают на разные вещи: 0: Мужчина в возрасте 16 лет или старше 1: женщина в возрасте 16 лет или старше 2: мужчина в возрасте 15 лет или младше 3: женщина в возрасте 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 if Sex else 2), если Age <16 else Sex', но я думаю, что« long »' if/else' на самом деле более читаемо. –

+0

Большое спасибо, я думаю, что я толстый, но не могли бы вы объяснить «возвращение 3, если секс еще 2»? По сути, как этот код преодолеет то, что я хочу 3 для 16 женщин и 2 для 16 мужчин? – giantsrock28

0

Вы можете использовать несколько, если заявления, Условный другое заявление или словарь:

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 в функцию, присвоив ей правильное имя и пояснив, что первая часть является логической: 'исходы = {(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 
Смежные вопросы