@@ -5198,48 +5198,48 @@ def stack(self, level=-1, dropna=True):
5198
5198
**Single level columns**
5199
5199
5200
5200
>>> df_single_level_cols = pd.DataFrame([[0, 1], [2, 3]],
5201
- ... index=['one ', 'two '],
5202
- ... columns=['a ', 'b '])
5201
+ ... index=['cat ', 'dog '],
5202
+ ... columns=['weight ', 'height '])
5203
5203
5204
5204
Stacking a dataframe with a single level column axis returns a Series:
5205
5205
5206
5206
>>> df_single_level_cols
5207
- a b
5208
- one 0 1
5209
- two 2 3
5207
+ weight height
5208
+ cat 0 1
5209
+ dog 2 3
5210
5210
>>> df_single_level_cols.stack()
5211
- one a 0
5212
- b 1
5213
- two a 2
5214
- b 3
5211
+ cat weight 0
5212
+ height 1
5213
+ dog weight 2
5214
+ height 3
5215
5215
dtype: int64
5216
5216
5217
5217
**Multi level columns: simple case**
5218
5218
5219
- >>> multicol1 = pd.MultiIndex.from_tuples([('X ', 'a '), ('X ', 'b ')])
5219
+ >>> multicol1 = pd.MultiIndex.from_tuples([('size ', 'weight '), ('size ', 'height ')])
5220
5220
>>> df_multi_level_cols1 = pd.DataFrame([[0, 1], [2, 3]],
5221
- ... index=['one ', 'two '],
5221
+ ... index=['cat ', 'dog '],
5222
5222
... columns=multicol1)
5223
5223
5224
5224
Stacking a dataframe with a multi-level column axis:
5225
5225
5226
5226
>>> df_multi_level_cols1
5227
- X
5228
- a b
5229
- one 0 1
5230
- two 2 3
5227
+ size
5228
+ weight height
5229
+ cat 0 1
5230
+ dog 2 3
5231
5231
>>> df_multi_level_cols1.stack()
5232
- X
5233
- one a 0
5234
- b 1
5235
- two a 2
5236
- b 3
5232
+ size
5233
+ cat height 1
5234
+ weight 0
5235
+ dog height 3
5236
+ weight 2
5237
5237
5238
5238
**Missing values**
5239
5239
5240
5240
>>> multicol2 = pd.MultiIndex.from_tuples([('X', 'a'), ('Y', 'b')])
5241
5241
>>> df_multi_level_cols2 = pd.DataFrame([[0.0, 1.0], [2.0, 3.0]],
5242
- ... index=['one ', 'two '],
5242
+ ... index=['cat ', 'dog '],
5243
5243
... columns=multicol2)
5244
5244
5245
5245
It is common to have missing values when stacking a dataframe
@@ -5250,13 +5250,13 @@ def stack(self, level=-1, dropna=True):
5250
5250
>>> df_multi_level_cols2
5251
5251
X Y
5252
5252
a b
5253
- one 0.0 1.0
5254
- two 2.0 3.0
5253
+ cat 0.0 1.0
5254
+ dog 2.0 3.0
5255
5255
>>> df_multi_level_cols2.stack()
5256
5256
X Y
5257
- one a 0.0 NaN
5257
+ cat a 0.0 NaN
5258
5258
b NaN 1.0
5259
- two a 2.0 NaN
5259
+ dog a 2.0 NaN
5260
5260
b NaN 3.0
5261
5261
5262
5262
**Prescribing the level(s) to be stacked**
@@ -5265,21 +5265,21 @@ def stack(self, level=-1, dropna=True):
5265
5265
5266
5266
>>> df_multi_level_cols2.stack(0)
5267
5267
a b
5268
- one X 0.0 NaN
5268
+ cat X 0.0 NaN
5269
5269
Y NaN 1.0
5270
- two X 2.0 NaN
5270
+ dog X 2.0 NaN
5271
5271
Y NaN 3.0
5272
5272
>>> df_multi_level_cols2.stack([0, 1])
5273
- one X a 0.0
5273
+ cat X a 0.0
5274
5274
Y b 1.0
5275
- two X a 2.0
5275
+ dog X a 2.0
5276
5276
Y b 3.0
5277
5277
dtype: float64
5278
5278
5279
5279
**Dropping missing values**
5280
5280
5281
5281
>>> df_multi_level_cols3 = pd.DataFrame([[None, 1.0], [2.0, 3.0]],
5282
- ... index=['one ', 'two '],
5282
+ ... index=['cat ', 'dog '],
5283
5283
... columns=multicol2)
5284
5284
5285
5285
Note that rows where all values are missing are dropped by
@@ -5289,18 +5289,18 @@ def stack(self, level=-1, dropna=True):
5289
5289
>>> df_multi_level_cols3
5290
5290
X Y
5291
5291
a b
5292
- one NaN 1.0
5293
- two 2.0 3.0
5292
+ cat NaN 1.0
5293
+ dog 2.0 3.0
5294
5294
>>> df_multi_level_cols3.stack(dropna=False)
5295
5295
X Y
5296
- one a NaN NaN
5296
+ cat a NaN NaN
5297
5297
b NaN 1.0
5298
- two a 2.0 NaN
5298
+ dog a 2.0 NaN
5299
5299
b NaN 3.0
5300
5300
>>> df_multi_level_cols3.stack(dropna=True)
5301
5301
X Y
5302
- one b NaN 1.0
5303
- two a 2.0 NaN
5302
+ cat b NaN 1.0
5303
+ dog a 2.0 NaN
5304
5304
b NaN 3.0
5305
5305
"""
5306
5306
from pandas .core .reshape .reshape import stack , stack_multiple
0 commit comments