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

如何使用seaborn barplot绘制pandas DataFrame两行数据的对比并列柱状图

错误原因分析

  • 第一个报错:sort_values是DataFrame按行排序的方法,你需要的是按第一行的数值给列排序,直接对表示第一行的Series对象排序取索引即可,不需要调用df.sort_values。你原代码中写的df.sort_values(df.iloc[0]...)逻辑错误,才会触发属性报错。
  • 第二个报错:seaborn的barplot要求输入长格式(tidy)数据,不支持直接传入宽表的全列和全值,所以会触发真值判断模糊的报错。

实现步骤与代码

你的思路是对的,确实需要先转换数据结构,直接用pandas的melt方法转长格式即可,完整代码如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 示例数据
df = pd.DataFrame({"X_1": [4, 2], "X_2": [2, 3], "X_3": [1, 1]})

# 步骤1:按索引0的数值降序排列列顺序
sorted_cols = df.iloc[0].sort_values(ascending=False).index
df_sorted = df[sorted_cols]

# 步骤2:宽表转长格式,适配seaborn绘图要求
df_long = df_sorted.reset_index(names='group').melt(
    id_vars='group',
    var_name='category',
    value_name='value'
)

# 步骤3:绘制并列柱状图
sns.barplot(data=df_long, x='category', y='value', hue='group')
plt.show()

运行后即可得到你预期的效果:列顺序按索引0的数值降序排列,每列对应两个并列柱子,分别展示索引0和1的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:45:03