Смещение реструктуризации данных 3-летнее скользящее окно новые столбцы pandas

немного новичок в манипулировании данными и может быть сложным вопросом, так что потерпите меня, пожалуйста.

У меня есть этот фрейм данных в пандах (извиняюсь за схематичное создание кадра данных с транспонированием - конечно, есть более эффективный способ):

f2 = np.transpose(pd.DataFrame(np.array([[10,30,50,11,21],[2006,2007,2008,2009,2010]]),
           index=['one','date'],columns=[1,2,3,4,5]))

и то, что я пытаюсь сделать, это создать новые столбцы во фрейме данных, которые смещают переменные в столбце «один» как на -1 год, так и на + 1 год, создавая скользящее окно данных за 3 года. Например, взяв 2007 год, я стремлюсь создать столбцы с переменными one_-1year (2006), one_0year (2007) и one_0year (2008). Конечный фрейм данных будет заключаться в удалении переменных за 2006 и 2010 годы, поскольку у них нет данных за 3-летний скользящий период.

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

f3 = np.transpose(pd.DataFrame(np.array([[10,30,50],[30,50,11],[50,11,21],[2007,2008,2009]]),
           index=['one_-1year', 'one_-0year','one_1year','date'],columns=[1,2,3]))

где были созданы два новых столбца «-1 год» и «+1 год».

0
0
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используя ваши конкретные начальные и конечные примеры, вы можете создать столбцы «-1year» и «1year», используя .shift(), затем удалить строки с отсутствующими данными, введенными shifting в начале и конце, и, наконец, переименовать и изменить порядок столбцов:

df = f2.copy()
df['one_-1year'] = df['one'].shift()
df['one_1year'] = df['one'].shift(-1)
df = df.rename(columns = {'one': 'one_-0year'})
df = df[['one_-1year', 'one_-0year', 'one_1year', 'date']].dropna()

Результат:

один_-1 гододин_-0годone_1yearдата
21030502007 г.
33050112008 г.
45011212009 г.

ах, shift() - это то, что я искал - спасибо!

lapgoch 16.05.2022 14:30

Другие вопросы по теме