0

I have two DataFrames (df_users and df_managers). Here is a sample of their data:

df_users = pd.DataFrame({
   'name': ['Robert', 'Richard', 'Alex'],
   'branch': ['Chicago', 'Montreal', 'Paris'], 
   'name_tag': ['Robert#112', 'Richard#1069', 'Alex#5918']
})

df_managers = pd.DataFrame({
   'name': ['Robert', 'Richard', 'Alex', 'Rose', 'Abler'],
   'email': ['robert112@stack.com', 'richard1069@stack.com', 'alex5918@stack.com', 'rose4222@stack.com', 'abler6120@stack.com',
   'name_tag': ['Robert#112', 'Richard#1069', 'Alex#5918', 'Rose#4222', 'Abler#6120']
})

I want to filter df_managers with only the rows where df_managers.name_tag == df_users.name_tag. In other words, i need the rows in df_managers for Robert, Richard and Alex.

What i tried (with no success):

df_users_that_are_also_managers = df_managers[df_managers.name_tag.isin(df_users.name_tag)]

#or

[...] = pd.merge(df_managers, df_users, on=['name_tag'], how='left')

Note that pd.merge() also creates new columns in the merged dataframe depending on the existing columns. I need the exact same columns of df_managers.

Thanks

ronswamson
  • 33
  • 3

1 Answers1

2

Use:

In [1792]: df_managers[df_managers.name_tag.isin(df_users.name_tag)]
Out[1792]: 
      name                  email      name_tag
0   Robert    robert112@stack.com    Robert#112
1  Richard  richard1069@stack.com  Richard#1069
2     Alex     alex5918@stack.com     Alex#5918

OR:

In [1793]: df_managers.merge(df_users['name_tag'])
Out[1793]: 
      name                  email      name_tag
0   Robert    robert112@stack.com    Robert#112
1  Richard  richard1069@stack.com  Richard#1069
2     Alex     alex5918@stack.com     Alex#5918
Mayank Porwal
  • 33,470
  • 8
  • 37
  • 58