Python 数据透视表中的多索引

Python 数据透视表中的多索引,python,pandas,multi-index,Python,Pandas,Multi Index,我正在处理一个透视表,该透视表如下所示: Style Site AVS End Qty. \ JP SIZE 116 120 140 ADULTS L M O OSFA S XL 0 50935801 2664 0 0 0 0 0 0 0 0

我正在处理一个透视表,该透视表如下所示:

            Style  Site AVS  End Qty.                                          \
JP SIZE                           116  120  140  ADULTS  L  M  O  OSFA  S  XL   
0        50935801  2664   0         0    0    0       0  0  0  0     0  0   3   
1        50935801  2807   0         0    0    0       0  0  0  0     0  0   3   
2        50935801  2832   0         0    0    0       0  0  0  0     0  0   3   
3        50935802  2702   1         0    0    0       0  0  1  0     0  0   0   
4        50985101  2849   0         0    0    0       0  0  3  0     0  0   0   

            Sales Qty.                              
JP SIZE  Total         116  120  140  ADULTS  L  M      
0            3           0    0    0       0  0  0 ...  
1            3           0    0    0       0  0  0 ...  
2            3           0    0    0       0  0  0 ...  
3            1           0    0    0       0  0 -1 ...  
4            3           0    0    0       0  0  0 ...  
我希望只有一个列标题向量,即[样式、站点、AVS、116、120、…、总计、销售数量。]

但是对于“Sales Qty.”列,而不是现在的表,我只想要total列(我现在可以使用jj['Sales Qty']['total']访问它,所以我想我可以将它保存在另一个变量中,删除它并在最后添加它)

到目前为止,我所尝试的一切都失败了,我想这是因为我还不太清楚多索引是如何工作的


提前感谢您在这方面提供的任何帮助

可能有更聪明的内置功能,但一种方法是将多索引作为元组列表使用,并按照您所描述的映射出新列名

def custom_rename(lvl1, lvl2):
    if lvl1 == 'End Qty.':
        return lvl2
    elif lvl1 == 'Sales Qty.' and lvl2 == 'Total':
        return 'Sales Qty.'
    elif lvl2 == '':
        return lvl1
    else:
        return '_'
然后应用于列并指定:

df.columns = [custom_rename(lvl1, lvl2) for lvl1, lvl2 in df.columns]
上面的
被用作不再需要的列的标记,因此最后一步是删除这些列

df = df.drop('_', axis=1)

你能添加一些代码来重现这个数据帧吗?(例如原始帧和pivot调用的示例)