@@ -53,6 +53,42 @@ def time_unstack(self):
53
53
self .df .unstack (1 )
54
54
55
55
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
+
56
92
class Unstack :
57
93
58
94
params = ["int" , "category" ]
0 commit comments