Pandas DataFrame.stack(~)
方法將指定的列級別轉換為行級別。這是 unstack(~)
的相反。
參數
1.level
| int
或 string
| optional
要轉換為行級別的列級別的整數索引或名稱。默認為 level=-1
,這意味著轉換最內層的列級別。
2. dropna
| boolean
| optional
是否刪除僅包含 NaN
的結果行。默認情況下,dropna=True
。
返回值
Series
或 DataFrame
。
例子
堆疊 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
中的alice
的age
的數據。
要指定要轉換的級別,請傳遞 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
請注意 cathy
的 age
級別行如何丟失。這是因為它僅包含 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
的行。
相關用法
- Python Pandas DataFrame std方法用法及代碼示例
- Python Pandas DataFrame sample方法用法及代碼示例
- Python Pandas DataFrame swaplevel方法用法及代碼示例
- Python PySpark DataFrame sampleBy方法用法及代碼示例
- Python Pandas DataFrame set_axis方法用法及代碼示例
- Python Pandas DataFrame select_dtypes方法用法及代碼示例
- Python PySpark DataFrame selectExpr方法用法及代碼示例
- Python PySpark DataFrame show方法用法及代碼示例
- Python PySpark DataFrame select方法用法及代碼示例
- Python Pandas DataFrame shift方法用法及代碼示例
- Python Pandas DataFrame sort_index方法用法及代碼示例
- Python Pandas DataFrame size屬性用法及代碼示例
- Python Pandas DataFrame set_index方法用法及代碼示例
- Python Pandas DataFrame swapaxes方法用法及代碼示例
- Python PySpark DataFrame sort方法用法及代碼示例
- Python PySpark DataFrame sample方法用法及代碼示例
- Python Pandas DataFrame sub方法用法及代碼示例
- Python Pandas DataFrame sem方法用法及代碼示例
- Python Pandas DataFrame sum方法用法及代碼示例
- Python PySpark DataFrame summary方法用法及代碼示例
- Python Pandas DataFrame shape屬性用法及代碼示例
- Python Pandas DataFrame sort_values方法用法及代碼示例
- Python Pandas DataFrame slice_shift方法用法及代碼示例
- Python Pandas DataFrame squeeze方法用法及代碼示例
- Python Pandas DataFrame empty屬性用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | stack method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。