Necesito verificar si los valores de la columna A contienen los valores de la columna B . Intenté usar el método isin () :

import pandas as pd

df = pd.DataFrame({'A': ['filePath_en_GB_LU_file', 'filePath_en_US_US_file', 'filePath_en_GB_PL_file'],
                   'B': ['_LU_', '_US_', '_GB_']})

df['isInCheck'] = df.A.isin(df.B)

Por alguna razón no está funcionando. Solo devuelve valores False , mientras que para las dos primeras filas debe devolver True .

¿Qué me estoy perdiendo allí?

1
TheBvrtosz 2 dic. 2019 a las 12:47

2 respuestas

La mejor respuesta

Creo que necesita DataFrame.apply, pero para la última fila también coincide:

df['isInCheck'] = df.apply(lambda x: x.B in x.A, axis=1)
print (df)
                        A     B  isInCheck
0  filePath_en_GB_LU_file  _LU_       True
1  filePath_en_US_US_file  _US_       True
2  filePath_en_GB_PL_file  _GB_       True
1
jezrael 2 dic. 2019 a las 09:55

Intenta usar una aplicación:

df['isInCheck'] = df.apply(lambda r: r['B'] in r['A'], axis=1)

Esto verificará en fila. Si desea verificar si hay varios elementos presentes, tal vez debería crear una columna para cada uno de ellos:

for e in df['B'].unique():
    df[f'has_"{e}"'] = df.apply(lambda r: e in r['A'], axis=1)

print(df)


                       A     B     has_"_LU_"   has_"_US_"  has_"_GB_"
0  filePath_en_GB_LU_file  _LU_        True       False        True
1  filePath_en_US_US_file  _US_       False        True       False
2  filePath_en_GB_PL_file  _GB_       False       False        True
0
FBruzzesi 2 dic. 2019 a las 10:01