TheBvrtosz
TheBvrtosz

Reputation: 95

Checking if the values from the pandas dataframe column exist in another column. isin method not working

I need to check if the values from the column A contain the values from column B. I tried using the isin() method:

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)

For some reason it's not working. It returns only False values, whereas for first two rows it should return True.

What am I missing in there?

Upvotes: 1

Views: 378

Answers (2)

FBruzzesi
FBruzzesi

Reputation: 6485

Try to use an apply:

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

This will check row-wise. If you want to check if multiple elements are presents, maybe you should create a column for each one of them:

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

Upvotes: 0

jezrael
jezrael

Reputation: 862691

I think you need DataFrame.apply, but for last row is also match:

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

Upvotes: 1

Related Questions