Tengo un df como este:
frame = pd.DataFrame({'a' : ['a,b,c', 'a,c,f', 'b,d,f','a,z,c']})
Y una lista de artículos:
letters = ['a','c']
Mi objetivo es obtener todas las filas frameque contienen al menos los 2 elementos enletters
Se me ocurrió esta solución:
for i in letters:
subframe = frame[frame['a'].str.contains(i)]
Esto me da lo que quiero, pero podría no ser la mejor solución en términos de escalabilidad. ¿Hay alguna solución 'vectorizada'? Gracias

Respuestas:
Construiría una lista de Series y luego aplicaría un vectorizado
np.all:Da como se esperaba:
fuente
Una forma es dividir los valores de las columnas en listas usando
str.split, y verificar siset(letters)es unasubsetde las listas obtenidas:Punto de referencia:
fuente
TypeError: unhashable type: 'set'cuando ejecuto su código? lo ejecutó en el marco proporcionado anteriormente1.0.3y python3.7probablemente solo soy yoPuedes usar
np.intersect1d:fuente
Esto también lo resuelve:
fuente
Utilice set.issubset :
fuente
IIUC
explodey un filtro booleanola idea es crear una serie única, luego podemos agrupar por índice el recuento de las ocurrencias verdaderas de su lista usando una suma acumulativa
fuente
salida:
cronométralo
salida
fuente