Я хочу объединить два кадра данных на нескольких ключах и добавить второй кадр данных к подходящим строкам - PullRequest
0 голосов
/ 07 января 2020

У меня есть два кадра данных, включая статистику НБА от всех команд с 2009 по 2019 год (30 команд * 10 сезонов = 300 строк). Я хочу присоединиться к ним, добавив столбцы из второго df в подходящую строку team_stat_by_season.

Клавиши, которые однозначно помещают их в строки, это «КОМАНДА» и «МИН». Вот как эти два df'а выглядят (очень сокращенно):

df1:
Team                 MIN        PTS         FGM
Orlando Magic       48.1        102.8       36.6
Phoenix Suns        48.5        102.1       38.1
Indiana Pacers      48.1        100.8       36.8
Orlando Magic       48.4        103.5       37.5

df2:
Team                 MIN        AST%        REB%
Phoenix Suns        48.5        1.61        52.9
Orlando Magic       48.1        1.54        49.8
Orlando Magic       48.4        1.70        50.6
Indiana Pacers      48.1        1.81        50.9

Результат должен выглядеть следующим образом:

Team                 MIN        PTS          FGM        AST%        REB%
Orlando Magic       48.1        102.8       36.6        1.54        49.8
Phoenix Suns        48.5        102.1       38.1        1.61        52.9    
Indiana Pacers      48.1        100.8       36.8        1.81        50.9
Orlando Magic       48.4        103.5       37.5        1.70        50.6

Я пробовал это с помощью следующего кода :

df_merged = pd.merge(left=df1,right=df2, how='left', left_on=['TEAM','MIN'], right_on=['TEAM','MIN'])

Но, к сожалению, в результате он всегда возвращает NaN в некоторых частях (хотя я уже проверил типы данных, и они все идеально подходят):

Team                 MIN        PTS         FGM         AST%        REB%
Orlando Magic       48.1        102.8       36.6        NaN         NaN
Phoenix Suns        48.5        102.1       38.1        NaN         NaN 
Indiana Pacers      48.1        100.8       36.8        NaN         NaN
Orlando Magic       48.4        103.5       37.5        NaN         NaN

Я надеюсь, что кто-то может помогите мне в этом вопросе, и я буду очень признателен за вашу помощь!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Почти там :) Вы должны быть последовательны в том, как пишется "Команда": все это в верхнем регистре в вашем фрейме данных, но не в вашем объединении.

Со следующим

pd.merge(left=df1,right=df2, how='left', on=['Team','MIN'])

вы получите

    Team    MIN     PTS     FGM     AST%    REB%
0   Magic   48.1    102.8   36.6    1.54    49.8
1   Suns    48.5    102.1   38.1    1.61    52.9
2   Pacers  48.1    100.8   36.8    1.81    50.9
3   Magic   48.4    103.5   37.5    1.70    50.6
0 голосов
/ 07 января 2020

Вы пытались использовать полное внешнее объединение, и это обеспечит необходимые вам результаты.

сохранил это как df2.csv

Team,MIN,AST%,REB%
Phoenix Suns,48.5,1.61,52.9
Orlando Magic,48.1,1.54,49.8
Orlando Magic,48.4,1.70,50.6
Indiana Pacers,48.1,1.81,50.9

сохранил это как df1.csv

Team,MIN,PTS,FGM
Orlando Magic,48.1,102.8,36.6
Phoenix Suns,48.5,102.1,38.1
Indiana Pacers,48.1,100.8,36.8
Orlando Magic,48.4,103.5,37.5

Ниже приведен код

df1 = pd.read_csv("df1.csv")
df2 = pd.read_csv("df2.csv")
pd.merge(df1, df2, how='outer', on=['Team','MIN'])

И ниже вывод.

             Team   MIN    PTS   FGM  AST%  REB%
0   Orlando Magic  48.1  102.8  36.6  1.54  49.8
1    Phoenix Suns  48.5  102.1  38.1  1.61  52.9
2  Indiana Pacers  48.1  100.8  36.8  1.81  50.9
3   Orlando Magic  48.4  103.5  37.5  1.70  50.6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...