Одна из тривиальных возможностей - отключить регулярное выражение:
res = df[df.apply(lambda r: r.str.contains('b', case=False, regex=False).any(), axis=1)]
Другой способ использования списка:
res = df[[any('b' in x.lower() for x in row) for row in df.values)]]