pandas透视表中的多重索引
我正在制作一个数据透视表,长得像这样:
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, ... , 总计, 销售数量]。
不过对于“销售数量”这一列,我希望现在表格里显示的内容能改成只有总计这一列(目前我可以通过 jj['销售数量']['总计'] 来访问这个数据,所以我想我可以把它存到另一个变量里,删除掉,然后最后再加上去)。
到目前为止我尝试的所有方法都没有成功,我觉得可能是因为我还不太理解 MultiIndex 是怎么工作的。
非常感谢你能提供的任何帮助!
1 个回答
0
可能有更聪明的方法,但一种做法是把多重索引当作一个元组的列表来处理,然后按照你描述的方式来映射新的列名。
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)