11
11
_try_sort , _default_index , _infer_dtype )
12
12
from pandas .core .index import (Factor , Index , MultiIndex , _ensure_index ,
13
13
_get_combined_index , NULL_INDEX )
14
- from pandas .core .indexing import _NDFrameIndexer , _maybe_droplevels
14
+ from pandas .core .indexing import _NDFrameIndexer
15
15
from pandas .core .internals import BlockManager , make_block , form_blocks
16
16
from pandas .core .frame import DataFrame
17
17
from pandas .core .generic import NDFrame
@@ -320,30 +320,7 @@ def from_dict(cls, data, intersect=False, orient='items', dtype=None):
320
320
data , index , columns = _homogenize_dict (data , intersect = intersect ,
321
321
dtype = dtype )
322
322
items = Index (sorted (data .keys ()))
323
- return Panel (data , items , index , columns )
324
-
325
- def __getitem__ (self , key ):
326
- if isinstance (self .items , MultiIndex ):
327
- return self ._getitem_multilevel (key )
328
- return super (Panel , self ).__getitem__ (key )
329
-
330
- def _getitem_multilevel (self , key ):
331
- loc = self .items .get_loc (key )
332
- if isinstance (loc , (slice , np .ndarray )):
333
- new_index = self .items [loc ]
334
- result_index = _maybe_droplevels (new_index , key )
335
- if self ._is_mixed_type :
336
- result = self .reindex (items = new_index )
337
- result .index = result_index
338
- else :
339
- new_values = self .values [loc , :, :]
340
- result = Panel (new_values ,
341
- items = self .items [loc ],
342
- major_axis = self .major_axis ,
343
- minor_axis = self .minor_axis )
344
- return result
345
- else :
346
- return self ._get_item_cache (key )
323
+ return __class__ (data , items , index , columns )
347
324
348
325
def _init_matrix (self , data , axes , dtype = None , copy = False ):
349
326
values = _prep_ndarray (data , copy = copy )
@@ -438,14 +415,14 @@ def _get_plane_axes(self, axis):
438
415
columns = self .minor_axis
439
416
440
417
return index , columns
441
-
418
+
442
419
@property
443
420
def _constructor (self ):
444
- return Panel
421
+ return self . __class__
445
422
446
423
# Fancy indexing
447
424
_ix = None
448
-
425
+
449
426
@property
450
427
def ix (self ):
451
428
if self ._ix is None :
@@ -723,7 +700,7 @@ def _combine(self, other, func, axis=0):
723
700
return self ._combine_frame (other , func , axis = axis )
724
701
elif np .isscalar (other ):
725
702
new_values = func (self .values , other )
726
- return Panel (new_values , self .items , self .major_axis ,
703
+ return self . _constructor (new_values , self .items , self .major_axis ,
727
704
self .minor_axis )
728
705
729
706
def __neg__ (self ):
@@ -744,7 +721,7 @@ def _combine_frame(self, other, func, axis=0):
744
721
new_values = func (self .values .swapaxes (0 , 2 ), other .values )
745
722
new_values = new_values .swapaxes (0 , 2 )
746
723
747
- return Panel (new_values , self .items , self .major_axis ,
724
+ return self . _constructor (new_values , self .items , self .major_axis ,
748
725
self .minor_axis )
749
726
750
727
def _combine_panel (self , other , func ):
@@ -758,7 +735,7 @@ def _combine_panel(self, other, func):
758
735
759
736
result_values = func (this .values , other .values )
760
737
761
- return Panel (result_values , items , major , minor )
738
+ return self . _constructor (result_values , items , major , minor )
762
739
763
740
def fillna (self , value = None , method = 'pad' ):
764
741
"""
@@ -790,10 +767,10 @@ def fillna(self, value=None, method='pad'):
790
767
for col , s in self .iterkv ():
791
768
result [col ] = s .fillna (method = method , value = value )
792
769
793
- return Panel .from_dict (result )
770
+ return self . _constructor .from_dict (result )
794
771
else :
795
772
new_data = self ._data .fillna (value )
796
- return Panel (new_data )
773
+ return self . _constructor (new_data )
797
774
798
775
add = _panel_arith_method (operator .add , 'add' )
799
776
subtract = sub = _panel_arith_method (operator .sub , 'subtract' )
@@ -882,7 +859,7 @@ def groupby(self, function, axis='major'):
882
859
"""
883
860
from pandas .core .groupby import PanelGroupBy
884
861
axis = self ._get_axis_number (axis )
885
- return PanelGroupBy (self , function , axis = axis )
862
+ return self . _constructorGroupBy (self , function , axis = axis )
886
863
887
864
def swapaxes (self , axis1 = 'major' , axis2 = 'minor' ):
888
865
"""
@@ -904,7 +881,7 @@ def swapaxes(self, axis1='major', axis2='minor'):
904
881
for k in range (3 ))
905
882
new_values = self .values .swapaxes (i , j ).copy ()
906
883
907
- return Panel (new_values , * new_axes )
884
+ return self . _constructor (new_values , * new_axes )
908
885
909
886
def to_frame (self , filter_observations = True ):
910
887
"""
@@ -1105,7 +1082,7 @@ def shift(self, lags, axis='major'):
1105
1082
else :
1106
1083
raise ValueError ('Invalid axis' )
1107
1084
1108
- return Panel (values , items = items , major_axis = major_axis ,
1085
+ return self . _constructor (values , items = items , major_axis = major_axis ,
1109
1086
minor_axis = minor_axis )
1110
1087
1111
1088
def truncate (self , before = None , after = None , axis = 'major' ):
0 commit comments