Передать имена в список и использовать "содержит" для каждого

У меня есть датафрейм, который называется один из его столбцов proj есть предложение в каждой строке, и в этом предложении упоминается название города. Я хочу сделать if при условии, что при передаче пароля будут доступны данные другого города.

proj
sd_32 New York
eo_31 Lisbon
..

Ex.

x = pd.read_csv(r'C:\Users\user\Desktop\Dataset.csv', sep = ',')
while True:
    passw = input('Password').upper()
    if not passw in ('A','B'):
        print('Try again')
        continue
    else:
        break
if passw == 'A':
    df = x[x['proj'].str.contains('New York')]
    print(df) 
elif passw == 'B':
    df = x[x['proj'].str.contains('Lisbon')]
    print(df)   

Как сделать это более питонским способом?

Я думал о создании списка:

city = ['New York','Lisbon','Berlin',..] #unique names of cities

а затем передать это в коде, который для каждого отдельного города, в зависимости от пароля делает if процесс, как я сделал, но с этой идеей. Как я могу продолжить это?

2 ответа

Решение

Возможно, используйте dict с паролями в качестве ключа и названиями городов в качестве значений: cities = {'A': 'New York', 'B': 'Lisbon', ...}, Надо признать, что вам все еще нужно проверить действительные ключи, но это происходит в цикле выше, когда вы запрашиваете ввод пароля (используя клавиши dict):

cities = {'A': 'New York', 'B': 'Lisbon'}
x = pd.read_csv(r'C:\Users\user\Desktop\Dataset.csv', sep = ',')
while True:
    passw = input('Password').upper()
    if passw not in cities:   # `in cities` same as `in cities.keys()`
        print('Try again')
        continue
    else:
        break
df = x[x['proj'].str.contains(cities[passw])]
print(df)

Вы можете использовать dict в твоем случае

Пример:

d = {"A": 'New York', "B": 'Lisbon'}
if passw in d:
    df = x[x['proj'].str.contains(d[passw])]
Другие вопросы по тегам