I would like to check if the Names
column contains any of the strings in the kw
. If yes, return the list.
Here is the data:
JavaScript
x
5
1
import pandas as pd
2
3
df = pd.DataFrame({'Names':['APPLE JUICE','APPLE DRINK','APPLE JUICE DRINK', 'APPLE','ORANGE AVAILABLE','TEA AVAILABLE']})
4
kw = ['APPLE JUICE', 'DRINK', 'ORANGE', 'LEMONS', 'STRAWBERRY', 'BLUEBERRY', 'TEA COFFEE']
5
I’ve tried:
JavaScript
1
2
1
df['Names2'] = df['Names'].apply(lambda x: [k if any([k in x for k in kw]) else ''])
2
But it returns:
JavaScript
1
8
1
Names Names2
2
0 APPLE JUICE [<function <lambda> at 0x0000017BB875C550>]
3
1 APPLE DRINK [<function <lambda> at 0x0000017BB875C550>]
4
2 APPLE JUICE DRINK [<function <lambda> at 0x0000017BB875C550>]
5
3 APPLE []
6
4 ORANGE AVAILABLE [<function <lambda> at 0x0000017BB875C550>]
7
5 TEA AVAILABLE []
8
I am expecting an output like:
JavaScript
1
8
1
Names Names2
2
0 APPLE JUICE ['APPLE JUICE']
3
1 APPLE DRINK ['DRINK']
4
2 APPLE JUICE DRINK ['APPLE JUICE', 'DRINK']
5
3 APPLE []
6
4 ORANGE AVAILABLE ['ORANGE']
7
5 TEA AVAILABLE []
8
Advertisement
Answer
You were very close:
JavaScript
1
2
1
df['Names2'] = df['Names'].map(lambda x: [y for y in kw if y in x])
2