You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas crosstab生成的DataFrame表头调整为双层结构?

实现Pandas双层表头的解决方案

使用Pandas的crosstab函数生成DataFrame,添加Total列和Percentage列后,通过to_html()转换为表格时,表头格式不符合需求。当前代码如下:

out = pd.crosstab(df1['lurn_FLS'], df1['LOCALITY'])
out['Total'] = out.sum(axis=1)
total_sum = out['Total'].sum()
out['Percentage'] = ((out['Total']/total_sum) *100).round(2)
print(out)

需要将表头调整为双层结构,预期格式如下:

Locality
lurn_flsmbn:match_both_non-emptyxne:mismatch neither emptyTotalPercentage
-----------------------------------------------------------------------------
121030051021
231040071050

要实现这种双层表头,需要利用Pandas的多层列索引(MultiIndex),具体步骤如下:

  • 重置索引,将行索引转为普通列
    原crosstab生成的DataFrame中,lurn_FLS是行索引,需先转为普通列,方便后续构造双层表头:

    out = out.reset_index().rename(columns={'lurn_FLS': 'lurn_fls'})
    
  • 构造双层列索引
    定义上下层表头的对应关系,通过pd.MultiIndex.from_tuples绑定生成多层索引:

    # 上层表头:第一列对应"Locality",其余列留空
    upper_headers = ['Locality', '', '', '', '']
    # 下层表头直接使用当前DataFrame的列名
    lower_headers = out.columns.tolist()
    
    # 绑定上下层表头,生成多层列索引
    out.columns = pd.MultiIndex.from_tuples(list(zip(upper_headers, lower_headers)))
    
  • 生成HTML表格
    此时调用to_html()会自动输出带双层表头的表格结构:

    html_table = out.to_html(index=False)
    

完整代码示例:

import pandas as pd

# 生成交叉表并添加合计、百分比列
out = pd.crosstab(df1['lurn_FLS'], df1['LOCALITY'])
out['Total'] = out.sum(axis=1)
total_sum = out['Total'].sum()
out['Percentage'] = ((out['Total']/total_sum) *100).round(2)

# 重置索引并调整列名
out = out.reset_index().rename(columns={'lurn_FLS': 'lurn_fls'})

# 构造双层表头
upper_headers = ['Locality', '', '', '', '']
lower_headers = out.columns.tolist()
out.columns = pd.MultiIndex.from_tuples(list(zip(upper_headers, lower_headers)))

# 生成HTML表格
html_table = out.to_html(index=False)
print(html_table)

内容的提问来源于stack exchange,提问作者Ashu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:23:10