Вы можете использовать деление по модулю и целому числу для извлечения year
s и week
, создания MultiIndex на DataFrame.set_index
и последнего изменения на Series.unstack
с преобразованием индекса в столбец и удаление имен столбцов с помощью DataFrame.rename_axis
:
df1 = (df.set_index([df['Week'] % 100, df['Week'] // 100])['Sales']
.unstack()
.rename_axis(None, axis=1)
.reset_index())
print (df1)
Week 2019 2020
0 1 700 100
1 2 800 200
2 3 900 300
РЕДАКТИРОВАТЬ: Вам необходимо добавить имя столбца в set_index
:
df1 = (df.set_index([df['Week'] % 100, 'Category', df['Week'] // 100])['Sales']
.unstack()
.rename_axis(None, axis=1)
.reset_index())
print (df1)
Week Category 2019 2020
0 1 Red 800 100
1 1 White 900 200
2 2 Red 100 300
3 2 White 200 700