Pandas сводная таблица с новым столбцом из имен столбцов - PullRequest
1 голос
/ 01 мая 2020

У меня есть следующий фрейм данных:

df = pd.DataFrame.from_dict({'id' : ['001', '002', '003'], 'name' : ['Louis', 'Tom', 'Jane'],
                     'Operating Systems': [67, 54, 77], 'Data Structures' : [88, 67, 90], 'Calculus' : [71, 53, 66]})

, который отображает следующую таблицу:

id    name    Operating Systems    Data Structures    Calculus 
001   Louis   67                   88                 71
002   Tom     54                   67                 53
003   Jane    77                   90                 66

Мне нужна следующая таблица:

id    name    subject             mark
001   Louis   Operating Systems   67
002   Tom     Data Structures     88
003   Jane    Calculus            71
001   Louis   Operating Systems   54
002   Tom     Data Structures     67
003   Jane    Calculus            53
001   Louis   Operating Systems   77
002   Tom     Data Structures     90
003   Jane    Calculus            66

Как сделать Я поворачиваю свой фрейм данных, чтобы получить этот результат?

1 Ответ

2 голосов
/ 01 мая 2020

Использование df.melt:

In [875]: df.melt(id_vars=['id','name'], var_name='subject', value_name='mark')                                                                                                                             
Out[875]: 
    id   name            subject  mark
0  001  Louis  Operating Systems    67
1  002    Tom  Operating Systems    54
2  003   Jane  Operating Systems    77
3  001  Louis    Data Structures    88
4  002    Tom    Data Structures    67
5  003   Jane    Data Structures    90
6  001  Louis           Calculus    71
7  002    Tom           Calculus    53
8  003   Jane           Calculus    66

ИЛИ

Использование set_index с stack:

In [877]: df.set_index(['id','name']).stack().reset_index(name='mark').rename(columns={'level_2':'subject'})

Out[877]: 
    id   name            subject  mark
0  001  Louis  Operating Systems    67
1  001  Louis    Data Structures    88
2  001  Louis           Calculus    71
3  002    Tom  Operating Systems    54
4  002    Tom    Data Structures    67
5  002    Tom           Calculus    53
6  003   Jane  Operating Systems    77
7  003   Jane    Data Structures    90
8  003   Jane           Calculus    66
...