我希望将以下多级列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个for循环,但是无法多次复制Index值。
答案 0 :(得分:4)
就像@Wen声明使用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
答案 1 :(得分:3)
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
答案 2 :(得分:0)
将其放入数据框,然后按名称和纸张分组。
new_table = table.groupby(['Name','Paper'])]