Merge remote-tracking branch 'upstream/master' into ea-take · TomAugspurger/pandas@37915e9 (original) (raw)

`@@ -64,35 +64,32 @@ def get_col_type(dtype):

`

64

64

``

65

65

`# reestablish the MultiIndex that has been joined by _to_str_column

`

66

66

`if self.fmt.index and isinstance(self.frame.index, MultiIndex):

`

``

67

`+

out = self.frame.index.format(

`

``

68

`+

adjoin=False, sparsify=self.fmt.sparsify,

`

``

69

`+

names=self.fmt.has_index_names, na_rep=self.fmt.na_rep

`

``

70

`+

)

`

``

71

+

``

72

`+

index.format will sparsify repeated entries with empty strings

`

``

73

`+

so pad these with some empty space

`

``

74

`+

def pad_empties(x):

`

``

75

`+

for pad in reversed(x):

`

``

76

`+

if pad:

`

``

77

`+

break

`

``

78

`+

return [x[0]] + [i if i else ' ' * len(pad) for i in x[1:]]

`

``

79

`+

out = (pad_empties(i) for i in out)

`

``

80

+

``

81

`+

Add empty spaces for each column level

`

67

82

`clevels = self.frame.columns.nlevels

`

68

``

`-

strcols.pop(0)

`

69

``

`-

name = any(self.frame.index.names)

`

70

``

`-

cname = any(self.frame.columns.names)

`

71

``

`-

lastcol = self.frame.index.nlevels - 1

`

72

``

`-

previous_lev3 = None

`

73

``

`-

for i, lev in enumerate(self.frame.index.levels):

`

74

``

`-

lev2 = lev.format()

`

75

``

`-

blank = ' ' * len(lev2[0])

`

76

``

`-

display column names in last index-column

`

77

``

`-

if cname and i == lastcol:

`

78

``

`-

lev3 = [x if x else '{}' for x in self.frame.columns.names]

`

79

``

`-

else:

`

80

``

`-

lev3 = [blank] * clevels

`

81

``

`-

if name:

`

82

``

`-

lev3.append(lev.name)

`

83

``

`-

current_idx_val = None

`

84

``

`-

for level_idx in self.frame.index.labels[i]:

`

85

``

`-

if ((previous_lev3 is None or

`

86

``

`-

previous_lev3[len(lev3)].isspace()) and

`

87

``

`-

lev2[level_idx] == current_idx_val):

`

88

``

`-

same index as above row and left index was the same

`

89

``

`-

lev3.append(blank)

`

90

``

`-

else:

`

91

``

`-

different value than above or left index different

`

92

``

`-

lev3.append(lev2[level_idx])

`

93

``

`-

current_idx_val = lev2[level_idx]

`

94

``

`-

strcols.insert(i, lev3)

`

95

``

`-

previous_lev3 = lev3

`

``

83

`+

out = [[' ' * len(i[-1])] * clevels + i for i in out]

`

``

84

+

``

85

`+

Add the column names to the last index column

`

``

86

`+

cnames = self.frame.columns.names

`

``

87

`+

if any(cnames):

`

``

88

`+

new_names = [i if i else '{}' for i in cnames]

`

``

89

`+

out[self.frame.index.nlevels - 1][:clevels] = new_names

`

``

90

+

``

91

`+

Get rid of old multiindex column and add new ones

`

``

92

`+

strcols = out + strcols[1:]

`

96

93

``

97

94

`column_format = self.column_format

`

98

95

`if column_format is None:

`

`@@ -118,7 +115,7 @@ def get_col_type(dtype):

`

118

115

`ilevels = self.frame.index.nlevels

`

119

116

`clevels = self.frame.columns.nlevels

`

120

117

`nlevels = clevels

`

121

``

`-

if any(self.frame.index.names):

`

``

118

`+

if self.fmt.has_index_names and self.fmt.show_index_names:

`

122

119

`nlevels += 1

`

123

120

`strrows = list(zip(*strcols))

`

124

121

`self.clinebuf = []

`