@@ -53,6 +53,42 @@ def time_unstack(self):
5353 self .df .unstack (1 )
5454
5555
56+ class ReshapeExtensionDtype :
57+
58+ params = ["datetime64[ns, US/Pacific]" , "Period[s]" ]
59+ param_names = ["dtype" ]
60+
61+ def setup (self , dtype ):
62+ lev = pd .Index (list ("ABCDEFGHIJ" ))
63+ ri = pd .Index (range (1000 ))
64+ mi = MultiIndex .from_product ([lev , ri ], names = ["foo" , "bar" ])
65+
66+ index = date_range ("2016-01-01" , periods = 10000 , freq = "s" , tz = "US/Pacific" )
67+ if dtype == "Period[s]" :
68+ index = index .tz_localize (None ).to_period ("s" )
69+
70+ ser = pd .Series (index , index = mi )
71+ df = ser .unstack ("bar" )
72+ # roundtrips -> df.stack().equals(ser)
73+
74+ self .ser = ser
75+ self .df = df
76+
77+ def time_stack (self , dtype ):
78+ self .df .stack ()
79+
80+ def time_unstack_fast (self , dtype ):
81+ # last level -> doesnt have to make copies
82+ self .ser .unstack ("bar" )
83+
84+ def time_unstack_slow (self , dtype ):
85+ # first level -> must make copies
86+ self .ser .unstack ("foo" )
87+
88+ def time_transpose (self , dtype ):
89+ self .df .T
90+
91+
5692class Unstack :
5793
5894 params = ["int" , "category" ]
0 commit comments