Jayaram G
Jayaram G

Reputation: 31

Select rows in pandas where value in one column is a substring of value in another column

I have a dataframe below

>df = pd.DataFrame({'A':['apple','orange','grape','pear','banana'], \
                    'B':['She likes apples', 'I hate oranges', 'This is a random sentence',\
                         'This one too', 'Bananas are yellow']})

>print(df)

    A       B
0   apple   She likes apples
1   orange  I hate oranges
2   grape   This is a random sentence
3   pear    This one too
4   banana  Bananas are yellow

I'm trying to fetch all rows where column B contains the value in column A.

Expected Result:

    A       B
0   apple   She likes apples
1   orange  I hate oranges
4   banana  Bananas are yellow

I'm able to do fetch only one row using

>df[df['B'].str.contains(df.iloc[0,0])]

    A       B
0   apple   She likes apples

How can I fetch all such rows?

Upvotes: 3

Views: 541

Answers (1)

jezrael
jezrael

Reputation: 862511

Use DataFrame.apply with convert both values to lower and test contains by in and filter by boolean indexing:

df = df[df.apply(lambda x: x.A in x.B.lower(), axis=1)]

Or list comprehension solution:

df = df[[a in b.lower() for a, b in zip(df.A, df.B)]]

print (df)
        A                   B
0   apple    She likes apples
1  orange      I hate oranges
4  banana  Bananas are yellow

Upvotes: 3

Related Questions