用法:
DataFrame.stack(level=- 1, dropna=True)
将列中的规定级别堆叠到索引。
返回与当前 DataFrame 相比具有一个或多个新的 inner-most 级别的 multi-level 索引的重塑 DataFrame 或 Series。新的inner-most 级别是通过旋转当前 DataFrame 的列来创建的:
if the columns have a single level, the output is a Series;
if the columns have multiple levels, the new index level(s) is (are) taken from the prescribed level(s) and the output is a DataFrame.
- level:int, str, list, 默认 -1
从列轴堆叠到索引轴的级别,定义为一个索引或标签,或者索引或标签的列表。
- dropna:布尔值,默认为真
是否删除结果帧/系列中缺少值的行。将列级别堆叠到索引轴上可以创建原始数据帧中缺少的索引和列值的组合。请参阅示例部分。
- DataFrame 或系列
堆叠的 DataFrame 或系列。
参数:
返回:
注意:
该函数的命名类似于将书籍集合从水平位置并排( DataFrame 的列)重新组织到彼此垂直堆叠(在 DataFrame 的索引中)。
有关更多示例,请参阅用户指南。
例子:
单层柱
>>> df_single_level_cols = pd.DataFrame([[0, 1], [2, 3]], ... index=['cat', 'dog'], ... columns=['weight', 'height'])
用单层列轴堆叠 DataFrame 会返回一个系列:
>>> 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)
使用 multi-level 列轴堆叠 DataFrame :
>>> 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)
在使用multi-level 列堆叠数据帧时,通常会出现缺失值,因为堆叠的数据帧通常比原始数据帧具有更多的值。缺失值用 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
相关用法
- Python pandas.DataFrame.std用法及代码示例
- Python pandas.DataFrame.sparse.from_spmatrix用法及代码示例
- Python pandas.DataFrame.select_dtypes用法及代码示例
- Python pandas.DataFrame.size用法及代码示例
- Python pandas.DataFrame.subtract用法及代码示例
- Python pandas.DataFrame.set_index用法及代码示例
- Python pandas.DataFrame.sort_index用法及代码示例
- Python pandas.DataFrame.shape用法及代码示例
- Python pandas.DataFrame.swaplevel用法及代码示例
- Python pandas.DataFrame.sub用法及代码示例
- Python pandas.DataFrame.sort_values用法及代码示例
- Python pandas.DataFrame.shift用法及代码示例
- Python pandas.DataFrame.set_flags用法及代码示例
- Python pandas.DataFrame.sparse.to_dense用法及代码示例
- Python pandas.DataFrame.squeeze用法及代码示例
- Python pandas.DataFrame.sample用法及代码示例
- Python pandas.DataFrame.set_axis用法及代码示例
- Python pandas.DataFrame.sum用法及代码示例
- Python pandas.DataFrame.ewm用法及代码示例
- Python pandas.DataFrame.dot用法及代码示例
注:本文由纯净天空筛选整理自pandas.pydata.org大神的英文原创作品 pandas.DataFrame.stack。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。