Создание пар на основе повторяющихся значений Pandas - PullRequest
0 голосов
/ 28 марта 2020

У меня есть pandas DataFrame, содержащий данные об игроке за несколько лет. Примечание: игрок может играть в нескольких лигах в одном сезоне. Вот пример DataFrame:

import pandas as pd
from io import StringIO
s = '''\
PlayerName,Year,League,Points
Player1,2010,LeagueA,10
Player1,2010,LeagueB,20
Player1,2011,LeagueC,30
'''
df = pd.read_csv(StringIO(s))

, который выглядит следующим образом:

  PlayerName  Year   League  Points
0    Player1  2010  LeagueA      10
1    Player1  2010  LeagueB      20
2    Player1  2011  LeagueC      30

Теперь я хочу создать новый DataFrame или переформатировать существующий, чтобы создать парные сравнения лиг они играли. Сравнение должно происходить в том же году или в течение 1 года, и повторных пар не может быть. Например, DataFrame, с которым я хочу закончить, будет выглядеть так:

Player Name      Year 1     League 1      Points 1     Year 2     League 2     Points 2
Player 1          2010      League A        10          2010      League B       20
Player 1          2010      League A        10          2011      League C       30
Player 1          2010      League B        20          2011      League C       30

То, как я сейчас думаю об этом:

df = data
df1 = df.drop_duplicates(subset=['Player Name', 'Year'], keep='first')
df2 = df.drop_duplicates(subset=['Player Name', 'Year'], keep='last')

merged_df1 = df.merge(df1, on='Player Name')
merged_df2 = df.merge(df2, on='Player Name')

temp = [merged_df1, merged_df2]
combined_df = pd.concat(temp)
combined_df = combined_df.drop_duplicates(subset='Player Name', keep='first')
combined_df['Year Difference'] = combined_df['Year_x'] - combined_df['Year_y']
combined_df = combined_df.loc[(combined_df['Year Difference'] >= -1) & (combined_df['Year Difference'] <=1]

Есть ли лучше способ сделать это? Я чувствую, что этот код довольно громоздкий и выдает ошибки. Любая помощь будет принята с благодарностью.

...