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


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。