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)