Problemas al usar listas de comparación en pandas DataFrame

Tengo un DataFrame en pandas con uno de los tipos de columna que es una lista en int, así:

df = pandas.DataFrame([[1,2,3,[4,5]],[6,7,8,[9,10]]], columns=['a','b','c','d']) >>> df abcd 0 1 2 3 [4, 5] 1 6 7 8 [9, 10] 

Me gustaría construir un filtro usando d, pero las operaciones de comparación normales no parecen funcionar:

 >>> df['d'] == [4,5] 0 False 1 False Name: d, dtype: bool 

Sin embargo, cuando inspecciono fila por fila, obtengo lo que esperaba

 >>> df.loc[0,'d'] == [4,5] True 

¿Que está pasando aqui? ¿Cómo puedo hacer comparaciones de listas?

Es un tema curioso, probablemente tiene que ver con el hecho de que la lista no es hashable.

 df['d'].apply(lambda x: x == [4,5]) 

Por supuesto, como lo sugiere DSM, los siguientes trabajos:

 df = pd.DataFrame([[1,2,3,(4,5)],[6,7,8,(9,10)]], columns=['a','b','c','d']) df['d'] == (4,5) 

Otra solución es utilizar la list comprehension :

 df[[x == [4, 5] for v in df['col2']]] 

Como alternativa, si desea mantener su estructura de “serie de listas”, puede convertir su serie a tuplas solo para fines de comparación. Esto es posible a través de pd.Series.apply :

 >>>>df['d'].apply(tuple) == (4, 5) 0 True 1 False Name: d, dtype: bool 

Sin embargo, tenga en cuenta que ninguna de las opciones disponibles para una serie de listas está vectorizada. Se recomienda que divida sus datos en series numéricas antes de realizar comparaciones.