當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python pandas.DataFrame.stack用法及代碼示例


用法:

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.

參數

levelint, 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

相關用法


注:本文由純淨天空篩選整理自pandas.pydata.org大神的英文原創作品 pandas.DataFrame.stack。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。