Я полагаю, что операция, которую вы просматриваете, - self-join
с некоторыми манипуляциями впоследствии. Как сказал Куанг Хоанг, объединение одного и того же блока данных / таблицы в разных столбцах называется самостоятельным объединением. Я считаю, что это подход, который получает ожидаемый результат:
df = pd.DataFrame({'Week':[1,1,1,1],
'Team':['A','B','C','D'],
'H/a':[np.nan,np.nan,'@','@'],
'Opp':['C','D','A','B'],
'Pf':[3,7,14,21],
'Pa':[14,21,3,7],
'Pyards':[100,200,300,400]})
print(df)
new_df = df.merge(df,how='inner',left_on=['Week','Team'],right_on=['Week','Opp'])
new_df = new_df[new_df['H/a_x'] != '@']
replacers = {'Team_x':'HomeTeam','Pf_x':'Pf','Pyards_x':'H-Pyards','Opp_x':'AwayTeam','Pa_x':'A-score','Pyards_y':'A-Pyards'}
new_df = new_df[['Week']+[x for x in replacers.keys()]]
new_df = new_df.rename(columns=replacers)
print(new_df)
Выход:
Week HomeTeam Pf H-Pyards AwayTeam A-score A-Pyards
0 1 A 3 100 C 14 300
1 1 B 7 200 D 21 400