Python & Pandas: ¿Cómo consultar si una columna de tipo lista contiene algo?

Tengo un dataframe, que contiene información sobre películas. Tiene una columna llamada genre , que contiene una lista de los géneros a los que pertenece. Por ejemplo:

 df['genre'] ## returns 0 ['comedy', 'sci-fi'] 1 ['action', 'romance', 'comedy'] 2 ['documentary'] 3 ['crime','horror'] ... 

Quiero saber cómo puedo consultar el dataframe, por lo que devuelve que la película pertenece a un género cerain.

Por ejemplo, algo como df['genre'].contains('comedy') devuelve 0 o 1.

Sé que para una lista, puedo hacer cosas como:

 'comedy' in ['comedy', 'sci-fi'] 

Sin embargo, en pandas, no encontré algo similar, lo único que sé es df['genre'].str.contains() , pero no funcionó para el tipo de lista.

Puede usar apply para crear mask y luego boolean indexing :

 mask = df.genre.apply(lambda x: 'comedy' in x) df1 = df[mask] print (df1) genre 0 [comedy, sci-fi] 1 [action, romance, comedy] 

usando conjuntos

 df.genre.map(set(['comedy']).issubset) 0 True 1 True 2 False 3 False dtype: bool 

 df.genre[df.genre.map(set(['comedy']).issubset)] 0 [comedy, sci-fi] 1 [action, romance, comedy] dtype: object 

Presentado de una manera que me gusta más

 comedy = set(['comedy']) iscomedy = comedy.issubset df[df.genre.map(iscomedy)] 

más eficiente

 comedy = set(['comedy']) iscomedy = comedy.issubset df[[iscomedy(l) for l in df.genre.values.tolist()]] 

usando str en dos pasadas
¡lento! ¡Y no perfectamente exacto!

 df[df.genre.str.join(' ').str.contains('comedy')] 

De acuerdo con el código fuente , puede usar .str.contains(..., regex=False) .

Un ejemplo completo:

 import pandas as pd data = pd.DataFrame([[['foo', 'bar']], [['bar', 'baz']]], columns=['list_column']) print(data) list_column 0 [foo, bar] 1 [bar, baz] filtered_data = data.loc[ lambda df: df.list_column.apply( lambda l: 'foo' in l ) ] print(filtered_data) list_column 0 [foo, bar] 

Un trazador de líneas que utiliza la indexación booleana y la comprensión de lista:

 searchTerm = 'something' df[[searchTerm in x for x in df['arrayColumn']]]