@@ -904,37 +904,34 @@ def get_col_type(dtype):
904
904
905
905
# reestablish the MultiIndex that has been joined by _to_str_column
906
906
if self .fmt .index and isinstance (self .frame .index , MultiIndex ):
907
+ out = self .frame .index .format (
908
+ adjoin = False , sparsify = self .fmt .sparsify ,
909
+ names = any (self .frame .index .names ), na_rep = self .fmt .na_rep
910
+ )
911
+
912
+ # index.format will sparsify repeated entries with empty strings
913
+ # so pad these with some empty space
914
+ def pad_empties (x ):
915
+ for pad in x [::- 1 ]:
916
+ if pad :
917
+ break
918
+ return [x [0 ]] + [i if i else ' ' * len (pad ) for i in x [1 :]]
919
+ out = (pad_empties (x ) for x in out )
920
+
921
+ # Add empty spaces for each column level
907
922
clevels = self .frame .columns .nlevels
923
+ out = [[' ' * len (x [- 1 ])] * clevels + x for x in out ]
924
+
925
+ # Add the column names to the last index column
926
+ cnames = self .frame .columns .names
927
+ if any (cnames ):
928
+ new_names = [i if i else '{}' for i in cnames ]
929
+ out [self .frame .index .nlevels - 1 ][:clevels ] = new_names
930
+
931
+ # Get rid of old multiindex column and add new ones
908
932
strcols .pop (0 )
909
- name = any (self .frame .index .names )
910
- cname = any (self .frame .columns .names )
911
- lastcol = self .frame .index .nlevels - 1
912
- previous_lev3 = None
913
- for i , lev in enumerate (self .frame .index .levels ):
914
- lev2 = lev .format ()
915
- blank = (' ' * len (lev2 [0 ]) if lev2 else
916
- ' ' * len (self .fmt .na_rep ))
917
- # display column names in last index-column
918
- if cname and i == lastcol :
919
- lev3 = [x if x else '{}' for x in self .frame .columns .names ]
920
- else :
921
- lev3 = [blank ] * clevels
922
- if name :
923
- lev3 .append (lev .name )
924
- current_idx_val = None
925
- for level_idx in self .frame .index .labels [i ]:
926
- idx_val = (lev2 [level_idx ] if level_idx >= 0 else
927
- self .fmt .na_rep )
928
- if ((previous_lev3 is None or
929
- previous_lev3 [len (lev3 )].isspace ()) and
930
- idx_val == current_idx_val ):
931
- # same index as above row and left index was the same
932
- lev3 .append (blank )
933
- else :
934
- lev3 .append (idx_val )
935
- current_idx_val = idx_val
936
- strcols .insert (i , lev3 )
937
- previous_lev3 = lev3
933
+ for i , o in enumerate (out ):
934
+ strcols .insert (i , o )
938
935
939
936
column_format = self .column_format
940
937
if column_format is None :
0 commit comments