Как удалить MultiIndex из моего DataFrame? - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь вытащить столбцы из моего фрейма данных, используя df.columns , и получаю:

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

Я никогда раньше не использовал MultiIndex, поэтому теперь я не понимаю, как получить 'Время »теперь как столбец, а не как индекс, поэтому я могу перейти от этого 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

(предпочтительно просто удалив MultiIndex), поэтому он похож на это:

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пытался использовать droplevel, но я получаю

Невозможно удалить 1 уровень из индекса с 1 уровнем: необходимо оставить хотя бы один уровень.

Это потому, что индексв столбцах а не в строках?

1 Ответ

1 голос
/ 03 октября 2019

IIUC у вас есть это:

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 

Входной кадр данных:

             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

Затем,

df2 = df1.set_index('time')

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

df2.reset_index()

Выход:

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
...