如何基于Pandas多级表头DataFrame创建Plotly Dash多级表头DataTable
实现方法
你只需要对Pandas多级表头的列做简单的格式转换,就可以适配Dash DataTable的多级表头配置,完整可运行代码如下:
import dash import dash_table import pandas as pd # 你的示例DataFrame data={('user_profile_id', ''): {0: 968, 1: 969}, ('email', ''): {0: 'aaaa@gmail.com', 1: 'bbbbb@gmail.com'}, ('results', 'Cope'): {0: 15, 1: 25}, ('results', 'Baba'): {0: 100, 1: 45}, ('results', 'Susu'): {0: 120, 1: 75}, ('results', 'Zizi'): {0: 150, 1: 52}, ('results', 'Fufu'): {0: 250, 1: 2}, ('feedback', 'Cope'): {0: 'Good', 1: 'Didn’t try it on'}, ('feedback', 'Baba'): {0: 'Good', 1: 'Didn’t try it on'}, ('feedback', 'Susu'): {0: 'Bad', 1: 'Didn’t try it on'}, ('feedback', 'Zizi'): {0: 'Bad', 1: 'Didn’t try it on'}, ('feedback', 'Fufu'): {0: 'Bad', 1: 'Didn’t try it on'} } df = pd.DataFrame.from_dict(data) # 转换生成Dash DataTable需要的columns配置 columns = [] col_map = {} # 存储原列名到id的映射,方便后面转换数据 for col_tuple in df.columns: # 用下划线拼接两级列名作为唯一id,避免重复 col_id = f"{col_tuple[0]}_{col_tuple[1]}".strip("_") columns.append({ "name": list(col_tuple), # 直接把多级列名元组转成列表作为name配置 "id": col_id }) col_map[col_tuple] = col_id # 转换数据,把列名替换为对应的id df_rename = df.rename(columns=col_map) table_data = df_rename.to_dict('records') # 构建Dash应用 app = dash.Dash(__name__) app.layout = dash_table.DataTable( columns=columns, data=table_data, merge_duplicate_headers=True, # 必须开启这个参数才能合并重复的一级表头 ) if __name__ == '__main__': app.run_server(debug=True)
关键配置说明
merge_duplicate_headers必须设置为True,Dash才会自动把相同的一级表头合并,和官方示例效果一致- 生成
columns配置时,name字段直接传入Pandas多级列名的两级值即可,空值保留空字符串就能实现第一列第一级表头为空的效果 - 用
col_map做列名映射是为了避免多级列名作为键的时候出现格式不匹配的问题,保证数据和列配置一一对应
内容的提问来源于stack exchange,提问作者Galat
相关产品推荐
相关产品推荐

