maxframe.dataframe.DataFrame.stack#
- DataFrame.stack(level=-1, dropna=True)#
将指定层级从列轴堆叠到索引轴。
返回一个重塑后的 DataFrame 或 Series,其多级索引相对于当前 DataFrame 具有一个或多个新的最内层级别。这些新的最内层级别是通过对当前 dataframe 的列进行透视操作创建的:
如果列只有一个层级,则输出为 Series;
如果列具有多个层级,则新索引层级来自指定的层级,且输出为 DataFrame。
- 参数:
- 返回:
堆叠后的 dataframe 或 series。
- 返回类型:
参见
DataFrame.unstack将指定层级从索引轴展开到列轴。
DataFrame.pivot将 dataframe 从长格式重塑为宽格式。
DataFrame.pivot_table创建一个类似电子表格的透视表作为 DataFrame。
备注
该函数的命名是类比于一组书籍从水平并排的位置(dataframe 的列)重新组织成垂直堆叠在一起(dataframe 的索引中)。
示例
单层列
>>> import maxframe.dataframe as md >>> df_single_level_cols = md.DataFrame([[0, 1], [2, 3]], ... index=['cat', 'dog'], ... columns=['weight', 'height'])
对具有单层列轴的 dataframe 进行堆叠操作将返回一个 Series:
>>> df_single_level_cols.execute() weight height cat 0 1 dog 2 3 >>> df_single_level_cols.stack().execute() cat weight 0 height 1 dog weight 2 height 3 dtype: int64
多层列:简单情况
>>> multicol1 = pd.MultiIndex.from_tuples([('weight', 'kg'), ... ('weight', 'pounds')]) >>> df_multi_level_cols1 = md.DataFrame([[1, 2], [2, 4]], ... index=['cat', 'dog'], ... columns=multicol1)
对具有多层级列轴的 dataframe 进行堆叠操作:
>>> df_multi_level_cols1.execute() weight kg pounds cat 1 2 dog 2 4 >>> df_multi_level_cols1.stack().execute() weight cat kg 1 pounds 2 dog kg 2 pounds 4
缺失值
>>> multicol2 = pd.MultiIndex.from_tuples([('weight', 'kg'), ... ('height', 'm')]) >>> df_multi_level_cols2 = md.DataFrame([[1.0, 2.0], [3.0, 4.0]], ... index=['cat', 'dog'], ... columns=multicol2)
在对具有多层级列的 dataframe 进行堆叠时,通常会出现缺失值,因为堆叠后的 dataframe 通常比原始 dataframe 包含更多的值。缺失值将用 NaN 填充:
>>> df_multi_level_cols2.execute() weight height kg m cat 1.0 2.0 dog 3.0 4.0 >>> df_multi_level_cols2.stack().execute() height weight cat kg NaN 1.0 m 2.0 NaN dog kg NaN 3.0 m 4.0 NaN
指定要堆叠的层级
第一个参数控制要堆叠的层级:
>>> df_multi_level_cols2.stack(0).execute() kg m cat height NaN 2.0 weight 1.0 NaN dog height NaN 4.0 weight 3.0 NaN >>> df_multi_level_cols2.stack([0, 1]).execute() cat height m 2.0 weight kg 1.0 dog height m 4.0 weight kg 3.0 dtype: float64
删除缺失值
>>> df_multi_level_cols3 = md.DataFrame([[None, 1.0], [2.0, 3.0]], ... index=['cat', 'dog'], ... columns=multicol2)
请注意,默认情况下所有值都缺失的行会被删除,但此行为可以通过 dropna 关键字参数来控制:
>>> df_multi_level_cols3.execute() weight height kg m cat NaN 1.0 dog 2.0 3.0 >>> df_multi_level_cols3.stack(dropna=False).execute() height weight cat kg NaN NaN m 1.0 NaN dog kg NaN 2.0 m 3.0 NaN >>> df_multi_level_cols3.stack(dropna=True).execute() height weight cat m 1.0 NaN dog kg NaN 2.0 m 3.0 NaN