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