@@ -724,35 +724,41 @@ def interweave(list_obj):
724
724
@pytest .mark .parametrize ("test_series" , [True , False ])
725
725
@pytest .mark .parametrize ("shuffle" , [True , False ])
726
726
@pytest .mark .parametrize ("periods,fill_method,limit" , [
727
+ (1 , None , None ), (1 , None , 1 ),
727
728
(1 , 'ffill' , None ), (1 , 'ffill' , 1 ),
728
729
(1 , 'bfill' , None ), (1 , 'bfill' , 1 ),
729
730
(- 1 , 'ffill' , None ), (- 1 , 'ffill' , 1 ),
730
731
(- 1 , 'bfill' , None ), (- 1 , 'bfill' , 1 ),
731
732
])
732
733
def test_pct_change (test_series , shuffle , periods , fill_method , limit ):
733
- vals = [3 , np .nan , 1 , 2 , 4 , 10 , np .nan , 4 ]
734
+ # GH 21200, 21621
735
+ vals = [3 , np .nan , np .nan , np .nan , 1 , 2 , 4 , 10 , np .nan , 4 ]
734
736
keys = ['a' , 'b' ]
735
737
key_v = np .repeat (keys , len (vals ))
736
738
df = DataFrame ({'key' : key_v , 'vals' : vals * 2 })
737
739
if shuffle :
738
740
order = np .random .RandomState (seed = 42 ).permutation (len (df ))
739
741
df = df .reindex (order ).reset_index (drop = True )
740
742
741
- df = getattr (df .groupby ('key' ), fill_method )(limit = limit )
742
- grp = df .groupby ('key' )
743
- exp = grp ['vals' ].shift (0 ) / grp ['vals' ].shift (periods ) - 1
744
- exp = exp .to_frame ('vals' )
743
+ if fill_method :
744
+ df_g = getattr (df .groupby ('key' ), fill_method )(limit = limit )
745
+ grp = df_g .groupby ('key' )
746
+ else :
747
+ grp = df .groupby ('key' )
748
+
749
+ expected = grp ['vals' ].obj / grp ['vals' ].shift (periods ) - 1
750
+ expected = expected .to_frame ('vals' )
745
751
746
752
if test_series :
747
- result = grp ['vals' ].pct_change (periods = periods ,
748
- fill_method = fill_method ,
749
- limit = limit )
750
- tm .assert_series_equal (result , exp .loc [:, 'vals' ])
753
+ result = df . groupby ( 'key' ) ['vals' ].pct_change (periods = periods ,
754
+ fill_method = fill_method ,
755
+ limit = limit )
756
+ tm .assert_series_equal (result , expected .loc [:, 'vals' ])
751
757
else :
752
- result = grp .pct_change (periods = periods ,
753
- fill_method = fill_method ,
754
- limit = limit )
755
- tm .assert_frame_equal (result , exp )
758
+ result = df . groupby ( 'key' ) .pct_change (periods = periods ,
759
+ fill_method = fill_method ,
760
+ limit = limit )
761
+ tm .assert_frame_equal (result , expected )
756
762
757
763
758
764
@pytest .mark .parametrize ("func" , [np .any , np .all ])
0 commit comments