Сначала создайте MultiIndex in columns
по header=[0,1,2]
параметру и преобразуйте первый столбец в индекс по index_col=[0]
в read_csv
:
df = pd.read_csv(filename, sep="|", header=[0,1,2], index_col=[0])
print (df)
xxxx A B C D E
xxxx P Q R S T
DATE L M N O P
01/02/1997 12 4 5 0 0
01/03/1998 71 2 4 8 0
Detail :
print (df.columns)
MultiIndex([('A', 'P', 'L'),
('B', 'Q', 'M'),
('C', 'R', 'N'),
('D', 'S', 'O'),
('E', 'T', 'P')],
names=['xxxx', 'xxxx', 'DATE'])
Затем транспонировать с помощью DataFrame.T
, изменить форму на DataFrame.stack
, отсортировать по DataFrame.sort_index
, создать метки для MultiIndex на DataFrame.rename_axis
и последнее преобразование MultiIndex Series
в DataFrame
на Series.reset_index
:
df1 = (df.T
.stack(dropna=False)
.sort_index(level=3)
.rename_axis(('a','b','c','d'))
.reset_index(name='e'))
print (df1)
a b c d e
0 A P L 01/02/1997 12
1 B Q M 01/02/1997 4
2 C R N 01/02/1997 5
3 D S O 01/02/1997 0
4 E T P 01/02/1997 0
5 A P L 01/03/1998 71
6 B Q M 01/03/1998 2
7 C R N 01/03/1998 4
8 D S O 01/03/1998 8
9 E T P 01/03/1998 0