I have a DataFrame like this:
Casa | Name |
---|---|
Solo Deportes | Paleta De Padel Adidas Metalbone CTRL |
Solo Deportes | Zapatillas Running Under Armour Charged Stamin... |
Solo Deportes | Rompeviento Con Capucha Reebok Woven Azu |
Solo Deportes | Remera Michael Jordan Chicago Bulls |
and Df2
:
Palabra | Marca |
---|---|
Acqualine | Acqualine |
Addnice | Addnice |
Adnnice | Addnice |
Under Armour | Under Armour |
Jordan | Nike |
Adidas | Adidas |
Reebok | Reebok |
How can I check each row of df['Name']
, see if the row contains a value of Df2['Palabra']
, and in that case get the value of Df2['Marca']
and put it in the new column?. The result should be something like this:
Casa | Name | Marca |
---|---|---|
Solo Deportes | Paleta De Padel Adidas Metalbone CTRL | Adidas |
Solo Deportes | Zapatillas Running Under Armour Charged Stamin... | Under Armour |
Solo Deportes | Rompeviento Con Capucha Reebok Woven Azu | Reebok |
Solo Deportes | Remera Michael Jordan Chicago Bulls | Nike |
Data:
df
:
{'Casa': ['Solo Deportes', 'Solo Deportes', 'Solo Deportes', 'Solo Deportes'],
'Name': ['Paleta De Padel Adidas Metalbone CTRL',
'Zapatillas Running Under Armour Charged Stamin...',
'Rompeviento Con Capucha Reebok Woven Azu',
'Remera Michael Jordan Chicago Bulls']}
Df2
:
{'Palabra': ['Acqualine', 'Addnice', 'Adnnice', 'Under Armour', 'Jordan', 'Adidas', 'Reebok'],
'Marca': ['Acqualine', 'Addnice', 'Addnice', 'Under Armour', 'Nike', 'Adidas', 'Reebok']}
CodePudding user response:
A simple solution is to use iterrows
in a generator expression and next
to iterate over Df2
and check if a matching item appears:
df1['Marca'] = df1['Name'].apply(lambda name: next((r['Marca'] for _, r in Df2.iterrows() if r['Palabra'] in name), float('nan')))
Output:
Casa Name Marca
0 Solo Deportes Paleta De Padel Adidas Metalbone CTRL Adidas
1 Solo Deportes Zapatillas Running Under Armour Charged Stamin... Under Armour
2 Solo Deportes Rompeviento Con Capucha Reebok Woven Azu Reebok
3 Solo Deportes Remera Michael Jordan Chicago Bulls Nike