Zaoqi's Blog -> Python数据分析教程 -> 图解Pandas ->
stack 与 unstack
stack 与 unstack¶
在线刷题
检查 or 强化 Pandas
数据分析操作?👉在线体验「Pandas进阶修炼300题」
Note
本页面代码可以在线编辑、执行!
数据堆叠¶
stack字面意思是数据堆叠,但是理解起来就是将数据由宽变长
怎样做到?
通过将部分列名拿下来当作索引来实现,例如下图所示
本来应是2列4行
,但通过 stack
可以将列A拿下来当作索引,从而变成1列8行
现在,按上图所示,对 df2 进行堆叠
import pandas as pd
import numpy as np
tuples = list(
zip(
*[
["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"],
["one", "two", "one", "two", "one", "two", "one", "two"],
]
)
)
index = pd.MultiIndex.from_tuples(tuples, names=["first", "second"])
df = pd.DataFrame(np.arange(1,17).reshape([8,2]), index=index, columns=["A", "B"])
df2 = df[:4]
df2
A | B | ||
---|---|---|---|
first | second | ||
bar | one | 1 | 2 |
two | 3 | 4 | |
baz | one | 5 | 6 |
two | 7 | 8 |
stacked = df2.stack()
stacked
first second
bar one A 1
B 2
two A 3
B 4
baz one A 5
B 6
two A 7
B 8
dtype: int64
逆堆叠¶
对上一题的结果进行还原,即逆堆叠,过程如下图所示
stacked.unstack()
A | B | ||
---|---|---|---|
first | second | ||
bar | one | 1 | 2 |
two | 3 | 4 | |
baz | one | 5 | 6 |
two | 7 | 8 |
分层逆堆叠¶
在使用 unstack 进行逆堆叠时,可以指定层级,例如指定按照 second 进行,也就是如下图所示
stacked.unstack('second')
second | one | two | |
---|---|---|---|
first | |||
bar | A | 1 | 3 |
B | 2 | 4 | |
baz | A | 5 | 7 |
B | 6 | 8 |
On this page