@@ -267,8 +267,9 @@ def test_value_counts_unique_nunique(self):
267267 # skips int64 because it doesn't allow to include nan or None
268268 continue
269269
270- if o .values .dtype == 'datetime64[ns]' and _np_version_under1p7 :
271- # Unable to assign None
270+ if ((isinstance (o , Int64Index ) and not isinstance (o ,
271+ (DatetimeIndex , PeriodIndex )))):
272+ # skips int64 because it doesn't allow to include nan or None
272273 continue
273274
274275 # special assign to the numpy array
@@ -283,12 +284,8 @@ def test_value_counts_unique_nunique(self):
283284 else :
284285 o = klass (np .repeat (values , range (1 , len (o ) + 1 )))
285286
286- if isinstance (o , DatetimeIndex ):
287- expected_s_na = Series (list (range (10 , 2 , - 1 )) + [3 ], index = values [9 :0 :- 1 ])
288- expected_s = Series (list (range (10 , 2 , - 1 )), index = values [9 :1 :- 1 ])
289- else :
290- expected_s_na = Series (list (range (10 , 2 , - 1 )) + [3 ], index = values [9 :0 :- 1 ], dtype = 'int64' )
291- expected_s = Series (list (range (10 , 2 , - 1 )), index = values [9 :1 :- 1 ], dtype = 'int64' )
287+ expected_s_na = Series (list (range (10 , 2 , - 1 )) + [3 ], index = values [9 :0 :- 1 ], dtype = 'int64' )
288+ expected_s = Series (list (range (10 , 2 , - 1 )), index = values [9 :1 :- 1 ], dtype = 'int64' )
292289
293290 tm .assert_series_equal (o .value_counts (dropna = False ), expected_s_na )
294291 tm .assert_series_equal (o .value_counts (), expected_s )
@@ -709,6 +706,28 @@ def test_sub_isub(self):
709706 rng -= 1
710707 tm .assert_index_equal (rng , expected )
711708
709+ def test_value_counts (self ):
710+ # GH 7735
711+ for tz in [None , 'UTC' , 'Asia/Tokyo' , 'US/Eastern' ]:
712+ idx = pd .date_range ('2011-01-01 09:00' , freq = 'H' , periods = 10 )
713+ # create repeated values, 'n'th element is repeated by n+1 times
714+ idx = DatetimeIndex (np .repeat (idx .values , range (1 , len (idx ) + 1 )), tz = tz )
715+
716+ exp_idx = pd .date_range ('2011-01-01 18:00' , freq = '-1H' , periods = 10 , tz = tz )
717+ expected = Series (range (10 , 0 , - 1 ), index = exp_idx , dtype = 'int64' )
718+ tm .assert_series_equal (idx .value_counts (), expected )
719+
720+ idx = DatetimeIndex (['2013-01-01 09:00' , '2013-01-01 09:00' , '2013-01-01 09:00' ,
721+ '2013-01-01 08:00' , '2013-01-01 08:00' , pd .NaT ], tz = tz )
722+
723+ exp_idx = DatetimeIndex (['2013-01-01 09:00' , '2013-01-01 08:00' ], tz = tz )
724+ expected = Series ([3 , 2 ], index = exp_idx )
725+ tm .assert_series_equal (idx .value_counts (), expected )
726+
727+ exp_idx = DatetimeIndex (['2013-01-01 09:00' , '2013-01-01 08:00' , pd .NaT ], tz = tz )
728+ expected = Series ([3 , 2 , 1 ], index = exp_idx )
729+ tm .assert_series_equal (idx .value_counts (dropna = False ), expected )
730+
712731
713732class TestPeriodIndexOps (Ops ):
714733 _allowed = '_allow_period_index_ops'
@@ -968,6 +987,30 @@ def test_sub_isub(self):
968987 rng -= 1
969988 tm .assert_index_equal (rng , expected )
970989
990+ def test_value_counts (self ):
991+ # GH 7735
992+ idx = pd .period_range ('2011-01-01 09:00' , freq = 'H' , periods = 10 )
993+ # create repeated values, 'n'th element is repeated by n+1 times
994+ idx = PeriodIndex (np .repeat (idx .values , range (1 , len (idx ) + 1 )), freq = 'H' )
995+
996+ exp_idx = PeriodIndex (['2011-01-01 18:00' , '2011-01-01 17:00' , '2011-01-01 16:00' ,
997+ '2011-01-01 15:00' , '2011-01-01 14:00' , '2011-01-01 13:00' ,
998+ '2011-01-01 12:00' , '2011-01-01 11:00' , '2011-01-01 10:00' ,
999+ '2011-01-01 09:00' ], freq = 'H' )
1000+ expected = Series (range (10 , 0 , - 1 ), index = exp_idx , dtype = 'int64' )
1001+ tm .assert_series_equal (idx .value_counts (), expected )
1002+
1003+ idx = PeriodIndex (['2013-01-01 09:00' , '2013-01-01 09:00' , '2013-01-01 09:00' ,
1004+ '2013-01-01 08:00' , '2013-01-01 08:00' , pd .NaT ], freq = 'H' )
1005+
1006+ exp_idx = PeriodIndex (['2013-01-01 09:00' , '2013-01-01 08:00' ], freq = 'H' )
1007+ expected = Series ([3 , 2 ], index = exp_idx )
1008+ tm .assert_series_equal (idx .value_counts (), expected )
1009+
1010+ exp_idx = PeriodIndex (['2013-01-01 09:00' , '2013-01-01 08:00' , pd .NaT ], freq = 'H' )
1011+ expected = Series ([3 , 2 , 1 ], index = exp_idx )
1012+ tm .assert_series_equal (idx .value_counts (dropna = False ), expected )
1013+
9711014
9721015if __name__ == '__main__' :
9731016 import nose
0 commit comments