Python конвертирует многостолбцовый фрейм данных pandas в фрейм данных таблицы с одним значением - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу преобразовать следующий многоуровневый столбец данных pandas в одну таблицу значений.

Исходная таблица:

    Name    Monica          Rachel      
    Paper    1  2   3        1  2   3

2018-01-01  13  33  15      31  25  33
2018-06-01  11  43  30      36  23  37

Новый требуемый формат таблицы данных:

Index        Name   Paper   Scores
2018-01-01  Monica    1       13
2018-01-01  Monica    2       33
2018-01-01  Monica    3       15
2018-06-01  Monica    1       11
2018-06-01  Monica    2       43
2018-06-01  Monica    3       30
2018-01-01  Rachel    1       31
2018-01-01  Rachel    2       25
2018-01-01  Rachel    3       33
2018-06-01  Rachel    1       36
2018-06-01  Rachel    2       23
2018-06-01  Rachel    3       37

Я пробовал 3 для циклов, но не мог повторить значения индекса столько раз.

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

stack и reset_index

df.rename_axis('Index').stack(['Name', 'Paper']).reset_index(name='Scores')

         Index    Name  Paper  Scores
0   2018-01-01  Monica      1      13
1   2018-01-01  Monica      2      33
2   2018-01-01  Monica      3      15
3   2018-01-01  Rachel      1      31
4   2018-01-01  Rachel      2      25
5   2018-01-01  Rachel      3      33
6   2018-06-01  Monica      1      11
7   2018-06-01  Monica      2      43
8   2018-06-01  Monica      3      30
9   2018-06-01  Rachel      1      36
10  2018-06-01  Rachel      2      23
11  2018-06-01  Rachel      3      37
0 голосов
/ 12 сентября 2018

Как и @ заявленное использование melt:

df.rename_axis('Index').reset_index().melt('Index', value_name='Score')

Вывод:

         Index Name Paper  Score
0   2018-01-01    m     1     13
1   2018-06-01    m     1     11
2   2018-01-01    m     2     33
3   2018-06-01    m     2     43
4   2018-01-01    m     3     15
5   2018-06-01    m     3     30
6   2018-01-01    r     1     31
7   2018-06-01    r     1     36
8   2018-01-01    r     2     25
9   2018-06-01    r     2     23
10  2018-01-01    r     3     33
11  2018-06-01    r     3     37
0 голосов
/ 12 сентября 2018

Создайте его во фрейм данных, а затем сгруппируйте по имени и по бумаге.

new_table = table.groupby (['Name', 'Paper'])]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...