1 2 3
| import pandas as pd import random import numpy as np
|
1 2 3 4 5 6
| ar1 = np.random.randint(46, 99, size=20).reshape(4, 5) lst1 = ["语文", "数学", "英语", "物理", "化学"] lst2 = ["周明", "王鹏", "刘华", "罗宾"]
df = pd.DataFrame(ar1, index=lst2, columns=lst1) df
|
out>>>>>
|
语文 |
数学 |
英语 |
物理 |
化学 |
周明 |
95 |
85 |
48 |
93 |
54 |
王鹏 |
72 |
50 |
50 |
80 |
47 |
刘华 |
96 |
67 |
60 |
80 |
97 |
罗宾 |
83 |
51 |
84 |
68 |
71 |
行列转置
out>>>>>
|
周明 |
王鹏 |
刘华 |
罗宾 |
语文 |
95 |
72 |
96 |
83 |
数学 |
85 |
50 |
67 |
51 |
英语 |
48 |
50 |
60 |
84 |
物理 |
93 |
80 |
80 |
68 |
化学 |
54 |
47 |
97 |
71 |
stack()
df.stack(level: 'Level' = -1, dropna: 'bool' = True)
- 将指定级别从列堆叠到索引.将数据的列索引转换为行索引
- stack和unstack默认操作为最内层,可以用level参数指定操作层
- stack转换dataframe时,若只有一层列索引则转换后的类型为series,否则为dataframe
1 2
| df.stack() type(df.stack())
|
out>>>>>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 周明 语文 95 数学 85 英语 48 物理 93 化学 54 王鹏 语文 72 数学 50 英语 50 物理 80 化学 47 刘华 语文 96 数学 67 英语 60 物理 80 化学 97 罗宾 语文 83 数学 51 英语 84 物理 68 化学 71 dtype: int32 pandas.core.series.Series
|
1 2
| df.stack().to_frame() type(df.stack().to_frame())
|
out>>>>>
|
|
0 |
周明 |
语文 |
95 |
数学 |
85 |
英语 |
48 |
物理 |
93 |
化学 |
54 |
王鹏 |
语文 |
72 |
数学 |
50 |
英语 |
50 |
物理 |
80 |
化学 |
47 |
刘华 |
语文 |
96 |
数学 |
67 |
英语 |
60 |
物理 |
80 |
化学 |
97 |
罗宾 |
语文 |
83 |
数学 |
51 |
英语 |
84 |
物理 |
68 |
化学 |
71 |
1
| pandas.core.frame.DataFrame
|
unstack()
out>>>>>
|
语文 |
数学 |
英语 |
物理 |
化学 |
周明 |
95 |
85 |
48 |
93 |
54 |
王鹏 |
72 |
50 |
50 |
80 |
47 |
刘华 |
96 |
67 |
60 |
80 |
97 |
罗宾 |
83 |
51 |
84 |
68 |
71 |
1 2
| df.unstack() type(df.unstack())
|
out>>>>>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 语文 周明 95 王鹏 72 刘华 96 罗宾 83 数学 周明 85 王鹏 50 刘华 67 罗宾 51 英语 周明 48 王鹏 50 刘华 60 罗宾 84 物理 周明 93 王鹏 80 刘华 80 罗宾 68 化学 周明 54 王鹏 47 刘华 97 罗宾 71 dtype: int32 pandas.core.series.Series
|
out>>>>>
|
|
0 |
语文 |
周明 |
95 |
王鹏 |
72 |
刘华 |
96 |
罗宾 |
83 |
数学 |
周明 |
85 |
王鹏 |
50 |
刘华 |
67 |
罗宾 |
51 |
英语 |
周明 |
48 |
王鹏 |
50 |
刘华 |
60 |
罗宾 |
84 |
物理 |
周明 |
93 |
王鹏 |
80 |
刘华 |
80 |
罗宾 |
68 |
化学 |
周明 |
54 |
王鹏 |
47 |
刘华 |
97 |
罗宾 |
71 |