Объединение строк на основе совпадающих столбцов pandas - PullRequest
0 голосов
/ 04 марта 2020

У меня есть CSV-файл, содержащий игры и статистику для каждой команды за весь сезон. Я хочу переместить выездную команду в ту же строку, что и домашняя команда, с которой она столкнулась на этой неделе.

Текущий фрейм данных:

      Week   Team   H/a   Opp   Pf   Pa   Pyards  
      1      A            C     3    14   100     
      1      B            D     7    21   200     
      1      C      @     A     14   3    300     
      1      D      @     B     21   7    400     

Желаемый фрейм данных:

  Week   HomeTeam   H-score   H-Pyards   AwayTeam   A-score   A-Pyards  
  1      A          3         100        C          14        300       
  1      B          7         200        D          21        400       

Но у меня было бы больше статистики для каждой команды и нескольких недель.

1 Ответ

1 голос
/ 04 марта 2020

Я полагаю, что операция, которую вы просматриваете, - 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...