Итерация внутри оператора IF, обусловленного списком в Python - PullRequest
0 голосов
/ 28 февраля 2020

Предположим, у меня есть df:

     Name    Surname  Age
0    Alex    Jackson   10
1     Bob      Black   12
2  Clarke  Flingston   13
3  Claude      White   11
4   Julia     Waters   10
5  Robert    Ferrari   12
6    Anna        Red    9
7   David       Blue   10
8    Luke        Man   12

и с:

list_n = []
for age, surname in zip(df.Age, df.Surname):
    if (age != 13 and 
        age != 11 and 
        age != 10):
        list_n.append(surname)

list_n
['Black', 'Ferrari', 'Red', 'Man']

Я получаю список фамилий, за исключением тех, которые имеют определенный возраст. Можно ли повторить условие if со списком возрастов?

Я пытался с пониманием списка, но оно не работает так, как должно быть:

list_age = [13,11,10]
list_n = []

for age, surname in zip(df.Age, df.Surname):
    [list_n.append(surname) for x in list_Age if age != x]

list_n
['Jackson', 'Jackson',  'Black',  'Black',  'Black', 'Flingston',
 'Flingston',  'White',  'White',  'Waters',  'Waters',  'Ferrari',
 'Ferrari',  'Ferrari',  'Red',  'Red',  'Red',  'Blue',  'Blue',
 'Man',  'Man',   'Man']

Ответы [ 3 ]

2 голосов
/ 28 февраля 2020

Вы также можете получить конечный результат напрямую, используя методы маскирования из pandas фрейма данных,

Попробуйте это,

list_n = df["Surname"][~df["Age"].isin(list_age)].to_list()

и при выполнении >>>print(list_n)

Выход:

['Black', 'Ferrari', 'Red', 'Man']
1 голос
/ 28 февраля 2020

list_n = [surname for age, surname in zip(df.Age, df.Surname) if age not in list_age]

1 голос
/ 28 февраля 2020
list_n = [surname for age, surname in zip(df.Age, df.Surname)
          if age not in {10, 11, 13}]
...