@@ -2286,6 +2286,7 @@ def reindex(
22862286 the input. In either case, a new xarray object is always returned.
22872287 fill_value : scalar, optional
22882288 Value to use for newly missing values
2289+ sparse: use sparse-array. By default, False
22892290 **indexers_kwarg : {dim: indexer, ...}, optional
22902291 Keyword arguments in the same form as ``indexers``.
22912292 One of indexers or indexers_kwargs must be provided.
@@ -2428,6 +2429,29 @@ def reindex(
24282429 the original and desired indexes. If you do want to fill in the `NaN` values present in the
24292430 original dataset, use the :py:meth:`~Dataset.fillna()` method.
24302431
2432+ """
2433+ return self ._reindex (
2434+ indexers ,
2435+ method ,
2436+ tolerance ,
2437+ copy ,
2438+ fill_value ,
2439+ sparse = False ,
2440+ ** indexers_kwargs ,
2441+ )
2442+
2443+ def _reindex (
2444+ self ,
2445+ indexers : Mapping [Hashable , Any ] = None ,
2446+ method : str = None ,
2447+ tolerance : Number = None ,
2448+ copy : bool = True ,
2449+ fill_value : Any = dtypes .NA ,
2450+ sparse : bool = False ,
2451+ ** indexers_kwargs : Any ,
2452+ ) -> "Dataset" :
2453+ """
2454+ same to _reindex but support sparse option
24312455 """
24322456 indexers = utils .either_dict_or_kwargs (indexers , indexers_kwargs , "reindex" )
24332457
@@ -2444,6 +2468,7 @@ def reindex(
24442468 tolerance ,
24452469 copy = copy ,
24462470 fill_value = fill_value ,
2471+ sparse = sparse ,
24472472 )
24482473 coord_names = set (self ._coord_names )
24492474 coord_names .update (indexers )
@@ -3327,7 +3352,7 @@ def ensure_stackable(val):
33273352
33283353 return data_array
33293354
3330- def _unstack_once (self , dim : Hashable , fill_value ) -> "Dataset" :
3355+ def _unstack_once (self , dim : Hashable , fill_value , sparse ) -> "Dataset" :
33313356 index = self .get_index (dim )
33323357 index = index .remove_unused_levels ()
33333358 full_idx = pd .MultiIndex .from_product (index .levels , names = index .names )
@@ -3336,7 +3361,9 @@ def _unstack_once(self, dim: Hashable, fill_value) -> "Dataset":
33363361 if index .equals (full_idx ):
33373362 obj = self
33383363 else :
3339- obj = self .reindex ({dim : full_idx }, copy = False , fill_value = fill_value )
3364+ obj = self ._reindex (
3365+ {dim : full_idx }, copy = False , fill_value = fill_value , sparse = sparse
3366+ )
33403367
33413368 new_dim_names = index .names
33423369 new_dim_sizes = [lev .size for lev in index .levels ]
@@ -3366,6 +3393,7 @@ def unstack(
33663393 self ,
33673394 dim : Union [Hashable , Iterable [Hashable ]] = None ,
33683395 fill_value : Any = dtypes .NA ,
3396+ sparse : bool = False ,
33693397 ) -> "Dataset" :
33703398 """
33713399 Unstack existing dimensions corresponding to MultiIndexes into
@@ -3379,6 +3407,7 @@ def unstack(
33793407 Dimension(s) over which to unstack. By default unstacks all
33803408 MultiIndexes.
33813409 fill_value: value to be filled. By default, np.nan
3410+ sparse: use sparse-array if True
33823411
33833412 Returns
33843413 -------
@@ -3416,7 +3445,7 @@ def unstack(
34163445
34173446 result = self .copy (deep = False )
34183447 for dim in dims :
3419- result = result ._unstack_once (dim , fill_value )
3448+ result = result ._unstack_once (dim , fill_value , sparse )
34203449 return result
34213450
34223451 def update (self , other : "CoercibleMapping" , inplace : bool = None ) -> "Dataset" :
0 commit comments