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

如何将DataFrame两列转为行列索引,第三列为值以绘制Seaborn热力图?

解决方法:长格式DataFrame转宽格式适配热力图

嘿,这个需求刚好是Pandas里很常见的长表转宽表场景,完全可以用pivot或者pivot_table快速实现,转完之后直接就能喂给Seaborn画热力图。我给你具体的操作步骤:

  • 第一步:清理冗余索引(可选但推荐)
    看你给出的原始DataFrame,索引是(x,y)的元组,但列里已经有单独的x和y列了,先把这个复合索引去掉会更清晰:

    df = df.reset_index(drop=True)
    
  • 核心操作:转成宽格式DataFrame
    用pivot方法直接转换,指定行、列、对应的值:

    # 行是Y值,列是X值,单元格填充对应的error
    heatmap_df = df.pivot(index='y', columns='x', values='error')
    

    这一步完成后,heatmap_df就是你想要的结构:行是Y的各个取值(1、2、3...49),列是X的各个取值(1、2...99),每个单元格对应对应的error数值。

  • 处理重复的(x,y)组合(可选)
    如果你的数据里存在同一个(x,y)对应多个error值的情况,pivot会报错,这时候改用pivot_table并指定聚合方式(比如取均值、求和):

    # 这里用均值聚合,你可以根据需求换成sum/max/min等
    heatmap_df = df.pivot_table(index='y', columns='x', values='error', aggfunc='mean')
    
  • 直接绘制热力图
    转好的DataFrame可以直接传给Seaborn的heatmap函数:

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    sns.heatmap(heatmap_df, cmap='viridis')  # cmap可以自定义配色
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.show()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:45:51