Нужно посоветовать при объединении датафреймов - PullRequest
0 голосов
/ 03 апреля 2020

У меня 2 кадра данных, как показано ниже. Я хотел бы объединить два кадра данных и отобразить расписание матчей с идентификатором матча и именами команд.

df_team = pd.DataFrame({'Team_ID':['1','2','3','4'],'Team_Name':['CSK','KKR','MI','RCB']})
df_match = pd.DataFrame({'Match_id':['01','02','03','04'],'Team_ID':['1','2','3','4'],'Opponent_Team_Id':['2','3','4','1']})
display(df_team)
display(df_match)

Вывод

Я получил ожидаемый результат с использованием приведенного ниже кода. Однако я хотел бы знать, можно ли это еще больше упростить. Пожалуйста, порекомендуйте. Заранее спасибо.

Слияние, чтобы получить имя команды хозяев

df_match_schedule = pd.merge(df_match,df_team,left_on='Team_ID',right_on='Team_ID')
df_match_schedule.rename(columns = {'Team_Name':'Home Team'}, inplace = True)

Слияние, чтобы получить имя команды гостей

df_match_schedule_2 = pd.merge(df_match_schedule,df_team,left_on='Opponent_Team_Id',right_on='Team_ID').drop('Team_ID_y',axis=1)
df_match_schedule_2.rename(columns = {'Team_Name':'Away Team'}, inplace = True)

Показать расписание матчей

df_match_schedule_2[['Match_id','Home Team','Away Team']]

Окончательный вывод

1 Ответ

0 голосов
/ 03 апреля 2020

Это сопоставляет идентификаторы команд с именем.

df_team = df_team.set_index("Team_ID")
df_match.loc[:,"Team_ID"] = df_match["Team_ID"].apply(lambda i: df_team.loc[i,"Team_Name"])
df_match.loc[:,"Opponent_Team_Id"] = df_match["Opponent_Team_Id"].apply(lambda i: df_team.loc[i,"Team_Name"])

(На заметке сторон, ваш предоставленный код не работает. Второе слияние.) Кроме того, при объединении и обоих фреймах данных одинаковые В именах столбцов вы можете использовать ключевое слово «on» вместо «right_on» и «left_on».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...