Chronicles
Chronicles

Reputation: 466

Put level of dataframe index at the same level of columns on a Multi-Index Dataframe

Context: I'd like to "bump" the index level of a multi-index dataframe up. In other words, I'd like to put the index level of a dataframe at the same level as the columns of a multi-indexed dataframe

Let's say we have this dataframe:

tt = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]})
tt.index.name = 'Index Column'

And we perform this change to add a multi-index level (like a label of a table)

tt = pd.concat([tt],keys=['Multi-Index Table Label'], axis=1)

Which results in this:

             Multi-Index Table Label
                                   A  B  C
Index Column
0                                  1  4  7
1                                  2  5  8
2                                  3  6  9

Desired Output: How can I make it so that the dataframe looks like this instead (notice the removal of the empty level on the dataframe/table):

             Multi-Index Table Label
Index Column                       A  B  C
0                                  1  4  7
1                                  2  5  8
2                                  3  6  9

Attempts: I was testing something out and you can essentially remove the index level by doing this:

tt.index.name = None

Which would result in :

  Multi-Index Table Label
                        A  B  C
0                       1  4  7
1                       2  5  8
2                       3  6  9

Essentially removing that extra level/empty line, but the thing is that I do want to keep the Index Column as it will give information about the type of data present on the index (which in this example are just 0,1,2 but can be years, dates, etc).

How could I do that?

Thank you all in advance :)

Upvotes: 0

Views: 248

Answers (1)

Behzad Aslani Avilaq
Behzad Aslani Avilaq

Reputation: 286

How about this:

tt = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]})
tt.insert(loc=0, column='Index Column', value=tt.index)
tt = pd.concat([tt],keys=['Multi-Index Table Label'], axis=1)
tt = tt.style.hide_index()

Upvotes: 1

Related Questions