pandas dataframe сравнивает значение двух столбцов, если они совпадают, берет значение из третьего столбца той же строки

   A_Name  A_url  B_Name  B url
0  Name 1  url_1  Name 10 None
1  Name 2  url_2  Name 5  None
2  Name 3  url_3  Name 4  None
3  Name 4  url_4  Name 11 None
4  Name 5  url_5  Name 3  None
5  Name 6  url_6  Name 7  None

Необходимо сравнить значение A Name столбца с B Name столбцом при совпадени взять значение из A url столбца по индексу и поставить в B url.

вот что я попробовал

data_df_name[['B_Name']].merge(data_df_name[['A_Name','A_url']].drop_duplicates(), how='left', left_on = ['B_Name'], right_on = ['A_Name'])

оно работает не так как мне надо, вот что я получил

   B Name  A_Name  B_url
0  Name 10 Name 10 None
1  Name 5  Name 5  url_5 
2  Name 5  Name 5  url_5
3  Name 4  Name 4  url_4
4  Name 11 Name 11 url_11 
5  Name 3  Name 3  url_3 
6  Name 7  Name 7  url_7 

вторая строка лишний, мне надо получить вот такой результат

   B Name  A_Name  B_url
0  Name 10 Name 10 None
1  Name 5  Name 5  url_5 
2  Name 4  Name 4  url_4
3  Name 11 Name 11 url_11 
4  Name 3  Name 3  url_3 
5  Name 7  Name 7  url_7 

Спасибо кто поможет.


Ответы (2 шт):

Автор решения: Євгеній Чулінда

Попробуйте так:

import pandas as pd
import numpy as np

df['B_url'] = np.where(df['A_Name'] == df['B_Name'], df['A_url'], 'Не совпадает']
→ Ссылка
Автор решения: Alexey Trukhanov

C помощью .apply применяем к столбцу B_Name функцию, которая ищет совпадение в столбце A_Name и возвращает соответствующее значение из столбца A_Url.

import pandas as pd
d = {
'A_Name': ['Name 1', 'Name 2', 'Name 3', 'Name 4', 'Name 5', 'Name 6'],
'A_Url': ['Url_1', 'Url_2', 'Url_3', 'Url_4', 'Url_5', 'Url_6'],
'B_Name': ['Name 10', 'Name 1', 'Name 34', 'Name 6', 'Name 2', 'Name 9'],
'B_Url': [None, None, None, None, None, None]}

df = pd.DataFrame.from_dict(d)

def fu(x):
    return None if (df.A_Name != x).all() else df.A_Url[x == df.A_Name].iloc[0]
df.B_Url = df.B_Name.apply(fu)
print(df)
→ Ссылка