Python 通过删除数据帧中的某些级别,将多级列缩减为单个级别

Python 通过删除数据帧中的某些级别,将多级列缩减为单个级别,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个如下所示的数据帧。 数据= 真正的数据帧要长得多 我应用了透视表,如下所示 table = (pd.pivot_table(data, index = ['SAMPLE'], columns = ['MATERIAL'], values = ['MAT_WEIGHT'], aggfunc = {'MAT_WEIGHT':np.sum})).fillna(0) 把桌子放在下面。 表= 我想将表从多个级别减少到一个级别列。 我想要的最后一个数据帧如下所示 table = (pd.piv

我有一个如下所示的数据帧。 数据=

真正的数据帧要长得多

我应用了透视表,如下所示

table = (pd.pivot_table(data, index = ['SAMPLE'], 
columns = ['MATERIAL'], values = ['MAT_WEIGHT'], 
aggfunc = {'MAT_WEIGHT':np.sum})).fillna(0)
把桌子放在下面。 表=

我想将表从多个级别减少到一个级别列。 我想要的最后一个数据帧如下所示

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

SAMPLE     MAT1     MAT2    MAT3    MAT4                                                                            
SAM1        100     50      80     30
SAM2        80      50      120    25
SAM3        78      58      65     25
如何做到这一点?
此处给出的数值仅用于可视化目的,不精确。

避免在列表下使用列名,以避免从中进行多索引,同时添加填充值参数:

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
最后一个用于索引到列和删除列名,可以使用:


避免在列表下使用列名以避免多重索引,同时添加fill_值参数:

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
最后一个用于索引到列和删除列名,可以使用:

table = table.reset_index().rename_axis(None, axis=1)