@@ -2560,6 +2560,57 @@ def test_groupby_with_empty(self):
2560
2560
grouped = series .groupby (grouper )
2561
2561
assert next (iter (grouped ), None ) is None
2562
2562
2563
+ def test_cumcount (self ):
2564
+ df = DataFrame ([['a' ], ['a' ], ['a' ], ['b' ], ['a' ]], columns = ['A' ])
2565
+ g = df .groupby ('A' )
2566
+ sg = g .A
2567
+
2568
+ expected = Series ([0 , 1 , 2 , 0 , 3 ])
2569
+
2570
+ assert_series_equal (expected , g .cumcount ())
2571
+ assert_series_equal (expected , sg .cumcount ())
2572
+
2573
+ def test_cumcount_empty (self ):
2574
+ ge = DataFrame ().groupby ()
2575
+ se = Series ().groupby ()
2576
+
2577
+ e = Series (dtype = 'int' ) # edge case, as this is usually considered float
2578
+
2579
+ assert_series_equal (e , ge .cumcount ())
2580
+ assert_series_equal (e , se .cumcount ())
2581
+
2582
+ def test_cumcount_dupe_index (self ):
2583
+ df = DataFrame ([['a' ], ['a' ], ['a' ], ['b' ], ['a' ]], columns = ['A' ], index = [0 ] * 5 )
2584
+ g = df .groupby ('A' )
2585
+ sg = g .A
2586
+
2587
+ expected = Series ([0 , 1 , 2 , 0 , 3 ], index = [0 ] * 5 )
2588
+
2589
+ assert_series_equal (expected , g .cumcount ())
2590
+ assert_series_equal (expected , sg .cumcount ())
2591
+
2592
+ def test_cumcount_mi (self ):
2593
+ mi = MultiIndex .from_tuples ([[0 , 1 ], [1 , 2 ], [2 , 2 ], [2 , 2 ], [1 , 0 ]])
2594
+ df = DataFrame ([['a' ], ['a' ], ['a' ], ['b' ], ['a' ]], columns = ['A' ], index = mi )
2595
+ g = df .groupby ('A' )
2596
+ sg = g .A
2597
+
2598
+ expected = Series ([0 , 1 , 2 , 0 , 3 ], index = mi )
2599
+
2600
+ assert_series_equal (expected , g .cumcount ())
2601
+ assert_series_equal (expected , sg .cumcount ())
2602
+
2603
+ def test_cumcount_groupby_not_col (self ):
2604
+ df = DataFrame ([['a' ], ['a' ], ['a' ], ['b' ], ['a' ]], columns = ['A' ], index = [0 ] * 5 )
2605
+ g = df .groupby ([0 , 0 , 0 , 1 , 0 ])
2606
+ sg = g .A
2607
+
2608
+ expected = Series ([0 , 1 , 2 , 0 , 3 ], index = [0 ] * 5 )
2609
+
2610
+ assert_series_equal (expected , g .cumcount ())
2611
+ assert_series_equal (expected , sg .cumcount ())
2612
+
2613
+
2563
2614
def test_filter_series (self ):
2564
2615
import pandas as pd
2565
2616
s = pd .Series ([1 , 3 , 20 , 5 , 22 , 24 , 7 ])
@@ -3180,7 +3231,7 @@ def test_tab_completion(self):
3180
3231
'min' ,'name' ,'ngroups' ,'nth' ,'ohlc' ,'plot' , 'prod' ,
3181
3232
'size' ,'std' ,'sum' ,'transform' ,'var' , 'count' , 'head' , 'describe' ,
3182
3233
'cummax' , 'dtype' , 'quantile' , 'rank' , 'cumprod' , 'tail' ,
3183
- 'resample' , 'cummin' , 'fillna' , 'cumsum' ])
3234
+ 'resample' , 'cummin' , 'fillna' , 'cumsum' , 'cumcount' ])
3184
3235
self .assertEqual (results , expected )
3185
3236
3186
3237
def assert_fp_equal (a , b ):
0 commit comments