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

2024-10-01 11:30:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

把桌子放在下面。 表=

       MAT_WEIGHT

MATERIAL    MAT1    MAT2    MAT3    MAT4                                                                            

SAMPLE

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

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

表_最终=

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

如何做到这一点? (此处给出的数值仅用于可视化目的,不精确。)


Tags: 数据sampletable级别pdmaterialweightmat
1条回答
网友
1楼 · 发布于 2024-10-01 11:30:55

避免在列表下使用列名以避免来自^{}MultiIndex,同时添加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

列索引和删除列名的最后一个选项可以使用^{}^{}

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

相关问题 更多 >