8
8
from pandas .core import common as com
9
9
import pandas .core .nanops as nanops
10
10
import pandas .tslib as tslib
11
+ import pandas .lib as lib
11
12
from pandas .util .decorators import Appender , cache_readonly
12
13
14
+
15
+ _shared_docs = dict ()
16
+ _indexops_doc_kwargs = dict (klass = 'IndexOpsMixin' , inplace = '' )
17
+
18
+
13
19
class StringMixin (object ):
14
20
15
21
"""implements string methods so long as object defines a `__unicode__`
@@ -474,12 +480,66 @@ def searchsorted(self, key, side='left'):
474
480
#### needs tests/doc-string
475
481
return self .values .searchsorted (key , side = side )
476
482
483
+ _shared_docs ['drop_duplicates' ] = (
484
+ """Return %(klass)s with duplicate values removed
485
+
486
+ Parameters
487
+ ----------
488
+ take_last : boolean, default False
489
+ Take the last observed index in a group. Default first
490
+ %(inplace)s
491
+
492
+ Returns
493
+ -------
494
+ deduplicated : %(klass)s
495
+ """ )
496
+
497
+ @Appender (_shared_docs ['drop_duplicates' ] % _indexops_doc_kwargs )
498
+ def drop_duplicates (self , take_last = False , inplace = False ):
499
+ duplicated = self .duplicated (take_last = take_last )
500
+ result = self [~ duplicated .values ]
501
+ if inplace :
502
+ return self ._update_inplace (result )
503
+ else :
504
+ return result
505
+
506
+ _shared_docs ['duplicated' ] = (
507
+ """Return boolean %(klass)s denoting duplicate values
508
+
509
+ Parameters
510
+ ----------
511
+ take_last : boolean, default False
512
+ Take the last observed index in a group. Default first
513
+
514
+ Returns
515
+ -------
516
+ duplicated : %(klass)s
517
+ """ )
518
+
519
+ @Appender (_shared_docs ['duplicated' ] % _indexops_doc_kwargs )
520
+ def duplicated (self , take_last = False ):
521
+ keys = com ._ensure_object (self .values )
522
+ duplicated = lib .duplicated (keys , take_last = take_last )
523
+ try :
524
+ return self ._constructor (duplicated ,
525
+ index = self .index ).__finalize__ (self )
526
+ except AttributeError :
527
+ from pandas .core .index import Index
528
+ return Index (duplicated )
529
+
477
530
#----------------------------------------------------------------------
478
531
# unbox reductions
479
532
480
533
all = _unbox (np .ndarray .all )
481
534
any = _unbox (np .ndarray .any )
482
535
536
+ #----------------------------------------------------------------------
537
+ # abstracts
538
+
539
+ def _update_inplace (self , result ):
540
+ raise NotImplementedError
541
+
542
+
483
543
class DatetimeIndexOpsMixin (object ):
484
544
""" common ops mixin to support a unified inteface datetimelike Index """
485
545
@@ -497,7 +557,6 @@ def _box_values(self, values):
497
557
"""
498
558
apply box func to passed values
499
559
"""
500
- import pandas .lib as lib
501
560
return lib .map_infer (values , self ._box_func )
502
561
503
562
@cache_readonly
0 commit comments