I have 2 dataframes, where I was looking if cells of column player in df1 existed in column last_name of df2. I merged on column player and if it is present in df2 it prints the cell but if its not it prints nan(which is what I wanted). I next wanted to make a description column but only for the non nan values. How can I add description for all the values that aren't nan?
df3 = df.merge(df2, left_on = 'player', right_on = 'last_name', how = 'left')
df1
player | team | position |
---|---|---|
Tatum | Celtics | SF |
Brown | Celtics | SG |
Smart | Celtics | PG |
Horford | Celtics | C |
Brogdon | Celtics | PG |
Gallinari | Celtics | F |
df2
last_name | team | position |
---|---|---|
Durant | Nets | SF |
James | Lakers | SF |
Smart | Celtics | PG |
Horford | Celtics | C |
Davis | Lakers | C |
Curry | Warriors | PG |
I changed the matched_player column name for readability with:
df3.rename(columns = {'last_name':'matched_player'}, inplace=True)
output(df3)
player | team | position | matched_player |
---|---|---|---|
Tatum | Celtics | SF | nan |
Brown | Celtics | SG | nan |
Smart | Celtics | PG | Smart |
Horford | Celtics | C | Horford |
Brogdon | Celtics | PG | nan |
Gallinari | Celtics | F | nan |
expected output
player | team | position | matched_player | description |
---|---|---|---|---|
Tatum | Celtics | SF | nan | |
Brown | Celtics | SG | nan | |
Smart | Celtics | PG | Smart | a player from df1 |
Horford | Celtics | C | Horford | a player from df1 |
Brogdon | Celtics | PG | nan | |
Gallinari | Celtics | F | nan |
CodePudding user response:
You can try np.where
df3['description'] = np.where(df3['matched_player'].notna(), 'a player from df1', '')
# or
df3['description'] = np.where(df3['matched_player'].isna(), '', 'a player from df1')