pandas.DataFrame.stack#
- DataFrame.stack(level=- 1, dropna=True)[源代码]#
从列到索引堆叠规定的级别。
返回重塑的DataFrame或Series,该DataFrame或Series具有与当前DataFrame相比具有一个或多个新的最内部级别的多级索引。通过旋转当前数据帧的列来创建新的最内部级别:
如果列只有一个标高,则输出为系列;
如果列有多个级别,则从指定的级别中获取新的索引级别,并且输出为DataFrame。
- 参数
- level整型、字符串、列表、缺省值-1
级别:从列轴堆叠到索引轴上,定义为一个索引或标签,或一组索引或标签。
- dropna布尔值,默认为True
是否删除结果帧/系列中缺少值的行。将列级别堆叠到索引轴上可以创建原始数据帧中缺少的索引值和列值的组合。请参见示例部分。
- 退货
- DataFrame或系列
堆叠的数据帧或系列。
参见
DataFrame.unstack将指定级别从索引轴取消堆叠到列轴。
DataFrame.pivot将数据帧从长格式重塑为宽格式。
DataFrame.pivot_table将电子表格样式的数据透视表创建为DataFrame。
注意事项
该函数的命名类似于图书集合从在水平位置(数据帧的列)上并排排列到垂直堆叠在彼此的顶部(在数据帧的索引中)。
参考文献 the user guide 查看更多示例。
示例
单层柱
>>> df_single_level_cols = pd.DataFrame([[0, 1], [2, 3]], ... index=['cat', 'dog'], ... columns=['weight', 'height'])
使用单个级别列轴堆叠数据帧将返回一个系列:
>>> df_single_level_cols weight height cat 0 1 dog 2 3 >>> df_single_level_cols.stack() 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 = pd.DataFrame([[1, 2], [2, 4]], ... index=['cat', 'dog'], ... columns=multicol1)
使用多层列轴堆叠数据帧:
>>> df_multi_level_cols1 weight kg pounds cat 1 2 dog 2 4 >>> df_multi_level_cols1.stack() weight cat kg 1 pounds 2 dog kg 2 pounds 4
缺少值
>>> multicol2 = pd.MultiIndex.from_tuples([('weight', 'kg'), ... ('height', 'm')]) >>> df_multi_level_cols2 = pd.DataFrame([[1.0, 2.0], [3.0, 4.0]], ... index=['cat', 'dog'], ... columns=multicol2)
在堆叠具有多层列的数据帧时,缺少值是很常见的,因为堆叠的数据帧通常比原始数据帧具有更多的值。缺少的值由NAN填充:
>>> df_multi_level_cols2 weight height kg m cat 1.0 2.0 dog 3.0 4.0 >>> df_multi_level_cols2.stack() 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) 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]) cat height m 2.0 weight kg 1.0 dog height m 4.0 weight kg 3.0 dtype: float64
正在删除缺少的值
>>> df_multi_level_cols3 = pd.DataFrame([[None, 1.0], [2.0, 3.0]], ... index=['cat', 'dog'], ... columns=multicol2)
请注意,缺省情况下会删除缺少所有值的行,但可以通过Dropna关键字参数控制此行为:
>>> df_multi_level_cols3 weight height kg m cat NaN 1.0 dog 2.0 3.0 >>> df_multi_level_cols3.stack(dropna=False) 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) height weight cat m 1.0 NaN dog kg NaN 2.0 m 3.0 NaN