У меня есть 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]
Есть ли лучше способ сделать это? Я чувствую, что этот код довольно громоздкий и выдает ошибки. Любая помощь будет принята с благодарностью.