Преобразование pandas кадра данных в специфицированную c структуру временных рядов - PullRequest
0 голосов
/ 13 января 2020

У меня есть pandas фрейм данных с данными бейсбола, например:

 data = [['1','2006', 10], ['1','2007', 8], ['1','2008', 14],['2','2010', 54], ['2','2011', 50], ['2','2012', 14]] 
 df = pd.DataFrame(data, columns = ['player_id', 'year','homeruns'])

Моя цель состоит в том, чтобы преобразовать этот фрейм данных, чтобы каждая строка имела player_id, год t, homeruns в год t, homeruns в t-1 и homeruns в t + 1, и иметь все возможные линии с годом t, для которых существуют t-1, t и t + 1 в df.

В моем примере мой вывод будет таким:

data_output = [['1','2007', 8,10,14], ['2','2011', 50,54,14]]
df_output = pd.DataFrame(dataoutput, columns = ['player_id','year_t','homeruns_t','homeruns_t_minus_1', 'homeruns_t_plus_1'])

Есть ли какой-нибудь хороший способ сделать это? Является ли это частью какого-либо python пакета временных рядов?

1 Ответ

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

Если я вас правильно понимаю, вы хотите homeruns для года, года минус один, год плюс один для каждого player_id (при условии, что данные отсортированы по году):

data = [['1','2006', 10], ['1','2007', 8], ['1','2008', 14],['2','2010', 54], ['2','2011', 50], ['2','2012', 14]]

df = pd.DataFrame(data, columns = ['player_id', 'year','homeruns'])

df['homeruns_t_minus_1'] = df.groupby(['player_id'])['homeruns'].shift()
df['homeruns_t_plus_1'] = df.groupby(['player_id'])['homeruns'].shift(-1)
print( df[~(df['homeruns_t_minus_1'].isna() | df['homeruns_t_plus_1'].isna())].astype(int) )

Отпечатки:

   player_id  year  homeruns  homeruns_t_minus_1  homeruns_t_plus_1
1          1  2007         8                  10                 14
4          2  2011        50                  54                 14
...