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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
