Cómo usar .loc cuando el valor de los elementos del dataframe está en la lista

Tengo un df dataframe donde los elementos en df.trajec son una lista.

Por ejemplo, df.ix['smith']['trajec'] = ['a', 'b', 'c', 'a', 'b']

type(df.ix['smith']) = list

En este caso, descubrí que no puedo usar ese comando.

 aaa = ['a', 'b', 'c', 'a', 'b'] df.loc[df.trajec == aaa] 

Y me da un mensaje de error como el de abajo.

ValueError: Arrays were different lengths: 8886 vs 5

¿Hay alguna forma de encontrar el subconjunto de la ttwig de datos df donde df.trajec es igual a una lista aaa ?

Necesita apply para crear mask :

 df = pd.DataFrame({'trajec':[['a', 'b', 'c', 'a', 'b'], ['a', 'b'], ['a','c', 'b']]}, index=['smith','smith1','smith2']) print (df) trajec smith [a, b, c, a, b] smith1 [a, b] smith2 [a, c, b] aaa = ['a', 'b', 'c', 'a', 'b'] mask = df.trajec.apply(lambda x: x == aaa) print (mask) smith True smith1 False smith2 False Name: trajec, dtype: bool #loc can be omit if need filter all columns print (df[mask]) trajec smith [a, b, c, a, b] #if need apply mask and return only column `trajec` print (df.loc[mask, 'trajec']) smith [a, b, c, a, b] Name: trajec, dtype: object 

Otra posible mask es por list comprehension :

 mask = [x == aaa for x in df.trajec.values] print (mask) [True, False, False] print (df[mask]) trajec smith [a, b, c, a, b] 
 print df[df.trajec.apply(tuple) == ('a', 'b', 'c', 'a', 'b')] trajec smith [a, b, c, a, b] 

Y esta solución parece ser un 20% más rápida que la aceptada:

 df = pd.DataFrame(np.random.randint(0, 100, size=(100000, 1)), columns=['trajec']) df = df.assign(trajec=df.trajec.apply(lambda x: [x])) %timeit df[df.trajec.apply(tuple) == (42,)] 10 loops, best of 3: 23.3 ms per loop %timeit df[df.trajec.apply(lambda x: x == [42])] 10 loops, best of 3: 29 ms per loop 

Curiosamente, la solución de comprensión de lista de la respuesta aceptada es aún más rápida:

 %timeit df[[x == [42] for x in df.trajec.values]] 10 loops, best of 3: 21.7 ms per loop