Buscar Pandas Column para Substring en otra columna

Tengo un ejemplo .csv, importado como df.csv, como sigue:

Ethnicity, Description 0 French, Irish Dance Company 1 Italian, Moroccan/Algerian 2 Danish, Company in Netherlands 3 Dutch, French 4 English, EnglishFrench 5 Irish, Irish-American 

Me gustaría revisar las pandas test1['Description'] para las cadenas en test1['Ethnicity'] . Esto debería devolver las filas 0, 3, 4 y 5 ya que las cadenas de descripción contienen cadenas en la columna de origen étnico.

Hasta ahora he intentado:

 df[df['Ethnicity'].str.contains('French')]['Description'] 

Esto devuelve cualquier cadena específica, pero me gustaría recorrerla sin buscar cada valor étnico específico. También he intentado convertir las columnas en listas e iterar a través, pero parece que no puedo encontrar una manera de devolver la fila, ya que no es mucho un DataFrame ().

¡Gracias de antemano!

Puede usar str.contains con los valores en la columna Ethnicity convertida a la tolist y luego join por | lo que está en regex or :

 print ('|'.join(df.Ethnicity.tolist())) French|Italian|Danish|Dutch|English|Irish mask = df.Description.str.contains('|'.join(df.Ethnicity.tolist())) print (mask) 0 True 1 False 2 False 3 True 4 True 5 True Name: Description, dtype: bool #boolean-indexing print (df[mask]) Ethnicity Description 0 French Irish Dance Company 3 Dutch French 4 English EnglishFrench 5 Irish Irish-American 

Parece que puedes omitir tolist() :

 print (df[df.Description.str.contains('|'.join(df.Ethnicity))]) Ethnicity Description 0 French Irish Dance Company 3 Dutch French 4 English EnglishFrench 5 Irish Irish-American 

La doble aplicación siempre popular:

 df[df.Description.apply(lambda x: df.Ethnicity.apply(lambda y: y in x)).any(1)] Ethnicity Description 0 French Irish Dance Company 3 Dutch French 4 English EnglishFrench 5 Irish Irish-American 

Sincronización

La respuesta de Jezrael es muy superior.

introduzca la descripción de la imagen aquí