Skip to content

Commit 0e17681

Browse files
committed
dropna added for unique method. Performance improvements for nunique method.
ref pandas-dev#7771
1 parent 8856b24 commit 0e17681

File tree

3 files changed

+34
-9
lines changed

3 files changed

+34
-9
lines changed

pandas/core/base.py

+16-8
Original file line numberDiff line numberDiff line change
@@ -288,21 +288,29 @@ def value_counts(self, normalize=False, sort=True, ascending=False,
288288
tz=getattr(self, 'tz', None))
289289
return result
290290

291-
def unique(self):
291+
def unique(self, dropna=False):
292292
"""
293293
Return array of unique values in the object. Significantly faster than
294294
numpy.unique. Includes NA values.
295295
296+
Parameters
297+
----------
298+
dropna : boolean, default False
299+
Don't include NaN in the result.
300+
296301
Returns
297302
-------
298303
uniques : ndarray
299304
"""
300-
from pandas.core.nanops import unique1d
301-
values = self.values
302-
if hasattr(values,'unique'):
303-
return values.unique()
304-
305-
return unique1d(values)
305+
if dropna:
306+
return self.dropna().unique()
307+
else:
308+
if hasattr(self.values, 'unique'):
309+
# Categorical Series not supported by unique1d
310+
return self.values.unique()
311+
else:
312+
from pandas.core.nanops import unique1d
313+
return unique1d(self.values)
306314

307315
def nunique(self, dropna=True):
308316
"""
@@ -319,7 +327,7 @@ def nunique(self, dropna=True):
319327
-------
320328
nunique : int
321329
"""
322-
return len(self.value_counts(dropna=dropna))
330+
return len(self.unique(dropna=dropna))
323331

324332
def factorize(self, sort=False, na_sentinel=-1):
325333
"""

pandas/core/categorical.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -869,7 +869,7 @@ def mode(self):
869869
fastpath=True)
870870
return result
871871

872-
def unique(self):
872+
def unique(self, **kwargs):
873873
"""
874874
Return the unique values.
875875

pandas/tseries/index.py

+17
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,23 @@ def take(self, indices, axis=0):
852852
return self[maybe_slice]
853853
return super(DatetimeIndex, self).take(indices, axis)
854854

855+
def unique(self, dropna=False):
856+
"""
857+
Index.unique with handling for DatetimeIndex metadata
858+
859+
Parameters
860+
----------
861+
dropna : boolean, default False
862+
Don't include NaN in the result.
863+
864+
Returns
865+
-------
866+
result : DatetimeIndex
867+
"""
868+
result = Int64Index.unique(self, dropna=dropna)
869+
return DatetimeIndex._simple_new(result, tz=self.tz,
870+
name=self.name)
871+
855872
def union(self, other):
856873
"""
857874
Specialized union for DatetimeIndex objects. If combine

0 commit comments

Comments
 (0)