DataFrame unstack后移除指定索引、列名及调整表头格式问题
解决unstack后列索引的两个问题
我来帮你搞定这两个困扰,其实核心都是处理unstack()后生成的多级列索引(MultiIndex),咱们一步步来:
问题1:移除"Eigenschaftstyp_Name"列名
执行unstack()后,你的列索引会变成多层结构,"Eigenschaftstyp_Name"应该是列索引某一层级的名称(可以通过df_fact_eng.columns.names查看)。要移除它,直接把对应层级的名称设为None就行:
# 如果"Eigenschaftstyp_Name"是列索引的唯一层级名称 df_fact_eng.columns.names = [None] # 如果是多层中的某一层(比如第二层),就针对性修改 # df_fact_eng.columns.names = [df_fact_eng.columns.names[0], None]
问题2:让所有列标题显示在同一行
多级列索引会导致标题分行展示,要把它们合并成同一行的单层标题,只需要把各层级的标签拼接成单个字符串就行。这里用下划线作为分隔符,你也可以换成其他符号:
# 把多级列索引的各部分拼接成单个列名 df_fact_eng.columns = df_fact_eng.columns.map('_'.join)
完整操作示例
把这两步和你现有的reset_index结合,完整代码如下:
# 你已经完成的unstack操作 df_fact_eng = df_fact_eng.unstack() # 重置指定的行索引 df_fact_eng = df_fact_eng.reset_index(level=['Style', 'Katalog_ID', 'Produkt_ID']) # 移除列索引的"Eigenschaftstyp_Name"名称 df_fact_eng.columns.names = [None] # 扁平化列索引,让所有标题在同一行 df_fact_eng.columns = df_fact_eng.columns.map( lambda x: '_'.join(str(i) for i in x) if isinstance(x, tuple) else x )
这样处理后,你的DataFrame就会回到和初始加载时一致的结构——列标题全部在同一行,也没有多余的列索引名称啦。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

