当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Pandas DataFrame stack方法用法及代码示例


Pandas DataFrame.stack(~) 方法将指定的列级别转换为行级别。这是 unstack(~) 的相反。

参数

1.level | intstring | optional

要转换为行级别的列级别的整数索引或名称。默认为 level=-1 ,这意味着转换最内层的列级别。

2. dropna | boolean | optional

是否删除仅包含 NaN 的结果行。默认情况下,dropna=True

返回值

SeriesDataFrame

例子

堆叠 single-level DataFrames

考虑以下single-level DataFrame:

df = pd.DataFrame([[2,3],[4,5]], columns=["alice","bob"], index=["age","height"])
df



       alice   bob
age      2      3
height   4      5

df 上调用 stack() 给出:

df.stack()



age     alice    2
        bob      3
height  alice    4
        bob      5
dtype: int64

在此,请注意以下事项:

  • 返回类型为Series,具有 2 级索引。

  • df 中的行标签和列标签已合并形成多索引。

将 DataFrames 与 multi-level 列堆叠

考虑以下带有 multi-level 列的 DataFrame:

index = [("A", "alice"), ("A", "bob"), ("B","cathy")]
multi_index = pd.MultiIndex.from_tuples(index)
df = pd.DataFrame([[2,3,4],[5,6,7]], columns=multi_index, index=["age","height"])
df



        A             B
        alice   bob   cathy
age     2       3     4
height  5       6     7

默认情况下, level=-1 ,这意味着最里面的列级别 ( [alice,bob,cathy] ) 将转换为行级别:

df.stack()



                A     B
age     alice   2.0   NaN
        bob     3.0   NaN
        cathy   NaN   4.0
height  alice   5.0   NaN
        bob     6.0   NaN
        cathy   NaN   7.0

请注意以下事项:

  • 最内层的列级别 ([alice, bob, cathy]) 成为行索引,并定位为最内层。

  • 使用 multi-levels 堆叠列通常会产生许多 NaN,因为例如,不存在有关组 B 中的 aliceage 的数据。

要指定要转换的级别,请传递 level 参数,如下所示:

df.stack(level=0)



             alice  bob   cathy
age      A   2.0    3.0   NaN
         B   NaN    NaN   4.0
height   A   5.0    6.0   NaN
         B   NaN    NaN   7.0

这里,level=0表示最外层的列级别([A,B])被转换为行级别。

指定 dropna

考虑以下 DataFrame :

index = [("A", "alice"), ("A", "bob"), ("B","cathy")]
multi_index = pd.MultiIndex.from_tuples(index)
df = pd.DataFrame([[2,3,None],[5,6,7]], columns=multi_index, index=["age","height"])
df



        A            B
        alice  bob   cathy
age     2      3     NaN
height  5      6     7.0

默认情况下, dropna=True ,这意味着仅包含 NaN 的行将从结果中删除:

df.stack()



               A     B
age     alice  2.0   NaN
        bob    3.0   NaN
height  alice  5.0   NaN
        bob    6.0   NaN
        cathy  NaN   7.0

请注意 cathyage 级别行如何丢失。这是因为它仅包含 NaN

要保留所有行,请传递dropna=False,如下所示:

df.stack(dropna=False)



        A             B
age     alice   2.0   NaN
        bob     3.0   NaN
        cathy   NaN   NaN
height  alice   5.0   NaN
        bob     6.0   NaN
        cathy   NaN   7.0

请注意,我们现在在 age 下有 cathy 的行。

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | stack method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。