Je pense que vous avez besoin:
df = df.stack().rename_axis(('a','b','c')).reorder_levels([2,0,1]).sort_index()
print (df)
c a b
2014 A A1 1
A1 9
B B1 9
B2 1
2015 A A1 5
A1 4
B B1 1
B2 7
2016 A A1 5
A1 1
B B1 6
B2 7
dtype: int64
Et si besoin columns
de Multiindex
:
df = df.stack()
.rename_axis(('a','b','c'))
.reorder_levels([2,0,1])
.sort_index()
.reset_index(name='count')
print (df)
c a b count
0 2014 A A1 1
1 2014 A A1 9
2 2014 B B1 9
3 2014 B B2 1
4 2015 A A1 5
5 2015 A A1 4
6 2015 B B1 1
7 2015 B B2 7
8 2016 A A1 5
9 2016 A A1 1
10 2016 B B1 6
11 2016 B B2 7
EDIT:
Il y a problème, vous devez convertir la première et la deuxième colonne à Multiindex
par le paramètre index_col
:
tab3 = "C:\\Users\\abk29\\NordicMontlyDemand\\NordicDY\\Book1.xls"
df = pd.read_excel(tab3, sheetname="Sheet1", skiprows=2, index_col=[0,1])
print (df)
2016 2017 2018
Unnamed: 1
A A1 1 1 1
A2 2 2 2
B B1 3 3 3
B2 4 4 4
df = df.stack().rename_axis(('a','b','c')).reorder_levels([2,0,1]).sort_index()
print (df)
c a b
2016 A A1 1
A2 2
B B1 3
B2 4
2017 A A1 1
A2 2
B B1 3
B2 4
2018 A A1 1
A2 2
B B1 3
B2 4
dtype: int64
Pouvez-vous ajouter un peu de l'échantillon? – jezrael
Ou avez-vous besoin de 'df = df.iloc [0] .to_frame()'? – jezrael