118
118
maybe_downcast_to_dtype ,
119
119
)
120
120
from pandas .core .dtypes .common import (
121
- ensure_platform_int ,
122
121
infer_dtype_from_object ,
123
122
is_1d_only_ea_dtype ,
124
123
is_bool_dtype ,
@@ -10331,7 +10330,7 @@ def c(x):
10331
10330
# ----------------------------------------------------------------------
10332
10331
# ndarray-like stats methods
10333
10332
10334
- def count (self , axis : Axis = 0 , level : Level = None , numeric_only : bool = False ):
10333
+ def count (self , axis : Axis = 0 , numeric_only : bool = False ):
10335
10334
"""
10336
10335
Count non-NA cells for each column or row.
10337
10336
@@ -10343,10 +10342,6 @@ def count(self, axis: Axis = 0, level: Level = None, numeric_only: bool = False)
10343
10342
axis : {0 or 'index', 1 or 'columns'}, default 0
10344
10343
If 0 or 'index' counts are generated for each column.
10345
10344
If 1 or 'columns' counts are generated for each row.
10346
- level : int or str, optional
10347
- If the axis is a `MultiIndex` (hierarchical), count along a
10348
- particular `level`, collapsing into a `DataFrame`.
10349
- A `str` specifies the level name.
10350
10345
numeric_only : bool, default False
10351
10346
Include only `float`, `int` or `boolean` data.
10352
10347
@@ -10400,16 +10395,6 @@ def count(self, axis: Axis = 0, level: Level = None, numeric_only: bool = False)
10400
10395
dtype: int64
10401
10396
"""
10402
10397
axis = self ._get_axis_number (axis )
10403
- if level is not None :
10404
- warnings .warn (
10405
- "Using the level keyword in DataFrame and Series aggregations is "
10406
- "deprecated and will be removed in a future version. Use groupby "
10407
- "instead. df.count(level=1) should use df.groupby(level=1).count()." ,
10408
- FutureWarning ,
10409
- stacklevel = find_stack_level (),
10410
- )
10411
- res = self ._count_level (level , axis = axis , numeric_only = numeric_only )
10412
- return res .__finalize__ (self , method = "count" )
10413
10398
10414
10399
if numeric_only :
10415
10400
frame = self ._get_numeric_data ()
@@ -10434,53 +10419,6 @@ def count(self, axis: Axis = 0, level: Level = None, numeric_only: bool = False)
10434
10419
10435
10420
return result .astype ("int64" ).__finalize__ (self , method = "count" )
10436
10421
10437
- def _count_level (self , level : Level , axis : AxisInt = 0 , numeric_only : bool = False ):
10438
- if numeric_only :
10439
- frame = self ._get_numeric_data ()
10440
- else :
10441
- frame = self
10442
-
10443
- count_axis = frame ._get_axis (axis )
10444
- agg_axis = frame ._get_agg_axis (axis )
10445
-
10446
- if not isinstance (count_axis , MultiIndex ):
10447
- raise TypeError (
10448
- f"Can only count levels on hierarchical { self ._get_axis_name (axis )} ."
10449
- )
10450
-
10451
- # Mask NaNs: Mask rows or columns where the index level is NaN, and all
10452
- # values in the DataFrame that are NaN
10453
- if frame ._is_mixed_type :
10454
- # Since we have mixed types, calling notna(frame.values) might
10455
- # upcast everything to object
10456
- values_mask = notna (frame ).values
10457
- else :
10458
- # But use the speedup when we have homogeneous dtypes
10459
- values_mask = notna (frame .values )
10460
-
10461
- index_mask = notna (count_axis .get_level_values (level = level ))
10462
- if axis == 1 :
10463
- mask = index_mask & values_mask
10464
- else :
10465
- mask = index_mask .reshape (- 1 , 1 ) & values_mask
10466
-
10467
- if isinstance (level , int ):
10468
- level_number = level
10469
- else :
10470
- level_number = count_axis ._get_level_number (level )
10471
-
10472
- level_name = count_axis ._names [level_number ]
10473
- level_index = count_axis .levels [level_number ]._rename (name = level_name )
10474
- level_codes = ensure_platform_int (count_axis .codes [level_number ])
10475
- counts = lib .count_level_2d (mask , level_codes , len (level_index ), axis = axis )
10476
-
10477
- if axis == 1 :
10478
- result = self ._constructor (counts , index = agg_axis , columns = level_index )
10479
- else :
10480
- result = self ._constructor (counts , index = level_index , columns = agg_axis )
10481
-
10482
- return result
10483
-
10484
10422
def _reduce (
10485
10423
self ,
10486
10424
op ,
0 commit comments