Nick
Nick

Reputation: 23

How do I remove a MultiIndex from my DataFrame?

I try pulling the columns from my dataframe using df.columns and I get:

MultiIndex([(     'time', ''),
        ('numbers', 11),
        ('numbers', 12),
        ('numbers', 13),
        ('numbers', 14)],
       names=[None, 'letters'])

I have never used a MultiIndex before so I am now confused how to get 'Time' as a column now instead of an index so I can go from this DataFrame:

df = 

                      time     numbers                           
letters                                a       b       c       d
0                     22:45:00      1016.0  1059.0  1042.0  1007.0
1                     23:00:00      1006.0  10507.0  1040.0  1084.0
2                     23:15:00      1084.0  1058.0  1047.0  1495.0
3                     23:30:00      1095.0  1498.0  1480.0  1048.0
4                     23:45:00      1098.0  1002.0  1044.0  1084.0
5                     00:00:00      1044.0  1517.0  1084.0  1051.0

(By preferably just removing the MultiIndex) So it resembles this:

df = 

                      time               a       b       c       d
0                     22:45:00      1016.0  1059.0  1042.0  1007.0
1                     23:00:00      1006.0  1007.0  1040.0  1084.0
2                     23:15:00      1084.0  1058.0  1047.0  1495.0
3                     23:30:00      1095.0  1498.0  1480.0  1048.0
4                     23:45:00      1098.0  1002.0  1044.0  1084.0
5                     00:00:00      1044.0  1517.0  1084.0  1051.0

I have tried using droplevel but I get

Cannot remove 1 levels from an index with 1 levels: at least one level must be left.

Is this because the index is in the columns and not the rows?

Upvotes: 2

Views: 3447

Answers (1)

Scott Boston
Scott Boston

Reputation: 153460

IIUC you have this:

dd = {('time', ''): {0: '22:45:00',
  1: '23:00:00',
  2: '23:15:00',
  3: '23:30:00',
  4: '23:45:00',
  5: '00:00:00'},
 ('numbers', 'a'): {0: 1016.0,
  1: 1006.0,
  2: 1084.0,
  3: 1095.0,
  4: 1098.0,
  5: 1044.0},
 ('numbers', 'b'): {0: 1059.0,
  1: 10507.0,
  2: 1058.0,
  3: 1498.0,
  4: 1002.0,
  5: 1517.0},
 ('numbers', 'c'): {0: 1042.0,
  1: 1040.0,
  2: 1047.0,
  3: 1480.0,
  4: 1044.0,
  5: 1084.0},
 ('numbers', 'd'): {0: 1007.0,
  1: 1084.0,
  2: 1495.0,
  3: 1048.0,
  4: 1084.0,
  5: 1051.0}}

 df1 = pd.DataFrame(dd).rename_axis([None,'letters'], axis=1)
 df1 

Input Dataframe:

             time numbers                         
letters                 a        b       c       d
0        22:45:00  1016.0   1059.0  1042.0  1007.0
1        23:00:00  1006.0  10507.0  1040.0  1084.0
2        23:15:00  1084.0   1058.0  1047.0  1495.0
3        23:30:00  1095.0   1498.0  1480.0  1048.0
4        23:45:00  1098.0   1002.0  1044.0  1084.0
5        00:00:00  1044.0   1517.0  1084.0  1051.0

Then,

df2 = df1.set_index('time')

df2.columns = df2.columns.droplevel(0)

df2.reset_index()

Output:

letters      time       a        b       c       d
0        22:45:00  1016.0   1059.0  1042.0  1007.0
1        23:00:00  1006.0  10507.0  1040.0  1084.0
2        23:15:00  1084.0   1058.0  1047.0  1495.0
3        23:30:00  1095.0   1498.0  1480.0  1048.0
4        23:45:00  1098.0   1002.0  1044.0  1084.0
5        00:00:00  1044.0   1517.0  1084.0  1051.0

Upvotes: 2

Related Questions