Сокращение многоуровневых столбцов до одного уровня путем удаления определенных уровней в кадре данных - PullRequest
1 голос
/ 05 марта 2020

У меня есть датафрейм, как показано ниже. data =

SAMPLE   MATERIAL   MAT_WEIGHT
SAM1     MAT1       15
SAM1     MAT3       35
SAM1     MAT1       45
SAM2     MAT2       55
SAM2     MAT2       05

Реальный фрейм данных намного длиннее.

Я применил сводную таблицу, как показано ниже.

table = (pd.pivot_table(data, index = ['SAMPLE'], 
columns = ['MATERIAL'], values = ['MAT_WEIGHT'], 
aggfunc = {'MAT_WEIGHT':np.sum})).fillna(0)

и получил таблицу, как показано ниже. table =

       MAT_WEIGHT

MATERIAL    MAT1    MAT2    MAT3    MAT4                                                                            

SAMPLE

SAM1        100     50      80     30
SAM2        80      50      120    25
SAM3        78      58      65     25

Я хочу уменьшить таблицу до одного уровня столбца из нескольких уровней. Окончательный кадр данных, который я хочу, выглядит следующим образом.

table_final =

SAMPLE     MAT1     MAT2    MAT3    MAT4                                                                            
SAM1        100     50      80     30
SAM2        80      50      120    25
SAM3        78      58      65     25

Как это сделать? (Числовые значения, приведенные здесь, приведены только для наглядности и не являются точными.)

1 Ответ

3 голосов
/ 05 марта 2020

Избегайте использования имен столбцов в списках, чтобы избежать MultiIndex из DataFrame.pivot_table, также добавьте параметр fill_value:

table = pd.pivot_table(data, 
                       index ='SAMPLE', 
                       columns = 'MATERIAL', 
                       values = 'MAT_WEIGHT', 
                       aggfunc = np.sum,
                       fill_value=0)

print (table)
MATERIAL  MAT1  MAT2  MAT3
SAMPLE                    
SAM1        60     0    35
SAM2         0    60     0

Последний для индекса в столбце и удалите имя столбца возможно использование DataFrame.reset_index и DataFrame.rename_axis:

table = table.reset_index().rename_axis(None, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...