如何将GroupBy生成的MultiIndex表头合并为单行表头
把GroupBy生成的MultiIndex表头合并为单行的方法
嘿,我之前也碰到过这个问题——GroupBy之后出来的MultiIndex列头确实有点麻烦,尤其是像你这样出现重复列名的情况。下面给你几个实用的解决办法,根据你的实际情况选就行:
先确认列结构
首先你可以先跑一下print(df.columns),看看你的MultiIndex到底有几层,每个层级的内容是什么,这样能更精准地处理。
方法1:直接拼接所有层级
如果你的MultiIndex是两层或者多层,想把它们直接拼成一个字符串当列名,用列表推导式就搞定了。比如用下划线分隔:
# 拼接所有层级,用下划线分隔 df.columns = ['_'.join(col).strip() for col in df.columns.values]
要是有些层级是空值或者空字符串,怕拼接出多余的下划线,可以先过滤掉空内容:
# 过滤空值后再拼接,避免多余符号 df.columns = ['_'.join(filter(None, col)).strip() for col in df.columns.values]
方法2:针对重复列名的特殊处理
看你的示例数据里有重复的a1_UNf、max列,应该是GroupBy的时候统计量和变量名形成了多层索引。比如可能一层是变量名,一层是统计指标(比如max、mean),这时候把两者拼接起来就能得到唯一的列名,比如a1_UNf_max、a1_UNf_mean,这样就不会重复了:
# 拼接后去掉末尾可能的下划线 df.columns = ['_'.join(col).strip('_') for col in df.columns.values]
验证效果
处理完之后跑个df.head()看看,表头应该就变成清晰的单行,而且列名都是唯一的啦。
内容的提问来源于stack exchange,提问作者Giladbi
相关产品推荐
相关产品推荐

