pandas: вывести все слова в которых есть определённая буква?

Есть некий Dataframe с названиями. По условию задачи необходимо написать функцию, которая должна в названии найти заданную букву и вывести в консоль все названия в которых эта буква есть.

Функция на вход должна в качестве аргументов принимать Dataframe и букву. Пока написала только функцию, которая отфильтровала Dataframe и вывела индекс буквы в слове. Не пойму как теперь полученные индексы превратить в слова.
Метод find() использовать обязательно.

Мой код:

def game_name(df, letter):
    letter = letter.lower()
    var = df_games['Name'].str.find(letter)
    return var

game_name(df_games, 'c')

На консоли выводится:


Ответы (1 шт):

Автор решения: Алексей Р

Переводим слова в серии df['Name'] в нижний регистр, затем ищем в ней букву тоже в нижнем регистре. Потом формируем булев массива путем сравнения индекса найденной буквы с -1 (не найдено) .gt(-1): если индекс больше -1, то True, иначе False. Фильтруем фрейм df[...] с использованием булева массива и возвращаем результат из функции .

def game_name(df, letter):
    return df[df['Name'].str.lower().str.find(letter.lower()).gt(-1)]


df_games = pd.DataFrame({'Name': ['Mario', 'Witcher', 'Diablo', 'Crysis', 'Cuphead']})
print(game_name(df_games, 'c'))
      Name
1  Witcher
3   Crysis
4  Cuphead

Дополнительно.
.find() не самый удобный метод для этой функции, лучше использовать .str.contains():

return df[df['Name'].str.contains(letter, case=False)]
→ Ссылка