Как «назвать» столбцы / строки в пандах DataFrame для ясности?

1

Я пытаюсь понять, как "называть" строки и столбцы в моих пандах DataFrame для ясности. Я не уверен, что он назвал, но я пытаюсь создать таблицу следующим образом: Изображение 174551

Есть ли простой способ добавить "Фактический класс" поверх имен столбцов и "Прогнозируемый класс" слева от имен строк, только для уточнения?

  • 1
    По мере того, как я гуглю, я вижу, что у панд есть нечто, называемое «мультииндекс». Может ли это быть использовано как хак для создания таблицы, которая выглядит примерно так?
Теги:
pandas
dataframe

3 ответа

1
Лучший ответ

Начать с df

classes = ['Cat', 'Dog', 'Rabbit']
df = pd.DataFrame([[5, 2, 0], [3, 3, 2], [0, 1, 11]], classes, classes)
df

        Cat  Dog  Rabbit
Cat       5    2       0
Dog       3    3       2
Rabbit    0    1      11

pandas.concat

pd.concat(
    [pd.concat(
        [df],
        keys=['Actual Class'], axis=1)],
    keys=['Predicted Class']
)

                       Actual Class           
                                Cat Dog Rabbit
Predicted Class Cat               5   2      0
                Dog               3   3      2
                Rabbit            0   1     11

pandas.MultiIndex.from_product

перестраивать

pd.DataFrame(
    df.values,
    pd.MultiIndex.from_product([['Predicted Class'], df.index]),
    pd.MultiIndex.from_product([['Actual Class'], df.columns])
)

                       Actual Class           
                                Cat Dog Rabbit
Predicted Class Cat               5   2      0
                Dog               3   3      2
                Rabbit            0   1     11
  • 1
    Большое спасибо, это прекрасно!
  • 0
    Рад, что смог помочь.
0

Вы действительно можете создать мультииндекс:

In [1]: import pandas as pd
   ...: import numpy as np


In [2]: arrays = [['Cat','Dog','Rabbit']*3,
   ...:          ['Cat']*3+['Dog']*3+['Rabbit']*3]     

In [3]: tuples = list(zip(*arrays))

In [4]: index = pd.MultiIndex.from_tuples(tuples, names=['Predicted class', 'Actual class'])

In [5]: index
Out[5]: 
MultiIndex(levels=[['Cat', 'Dog', 'Rabbit'], ['Cat', 'Dog', 'Rabbit']],
           labels=[[0, 1, 2, 0, 1, 2, 0, 1, 2], [0, 0, 0, 1, 1, 1, 2, 2, 2]],
           names=['Predicted class', 'Actual class'])

In [6]: numbers = [5,3,0,2,3,1,0,2,11]

In [7]: data = pd.Series(numbers, index=index)

In [8]: df = pd.DataFrame(data.unstack('Actual class'))

In [9]: df
Out[9]: 
Actual class     Cat  Dog  Rabbit
Predicted class                  
Cat                5    2       0
Dog                3    3       2
Rabbit             0    1      11
0
pd.DataFrame({
('Actual class', 'Cat'): {('Predicted class', 'Cat'): 5, ('Predicted class', 'Dog'): 2, ('Predicted class', 'Rabbit'): 0},
('Actual class', 'Dog'): {('Predicted class', 'Cat'): 3, ('Predicted class', 'Dog'): 3, ('Predicted class', 'Rabbit'): 2},
('Actual class', 'Rabbit'): {('Predicted class', 'Cat'): 0, ('Predicted class', 'Dog'): 1, ('Predicted class', 'Rabbit'): 11},
    })

Изображение 174551

Не уверен, что это хорошая идея, вы создаете MultiIndex, чтобы прояснить представление данных в виде строки. Вы будете кодифицировать код для ничего полезного.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню