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

如何用pandas dataframe.plot从长数据绘制分组柱状图

用pandas DataFrame.plot实现长格式数据的分组柱状图

没问题!要替代Seaborn的sns.barplot实现你要的分组柱状图,核心是先把长格式数据转换为宽格式——因为pandas的plot方法默认是按列来生成分组柱子的,而你当前的grouped_dataframe是长格式(每行对应一个日期+交易类型的组合)。

步骤1:将长格式数据转为宽格式

用pivot方法来重塑数据,把Transaction type转成列,Date作为索引,Amount (EUR)作为值:

# 转换为宽格式
wide_df = grouped_dataframe.pivot(
    index='Date',
    columns='Transaction type',
    values='Amount (EUR)'
)

如果你的数据存在某个日期缺少某类交易的情况(会出现NaN),可以用pivot_table并指定fill_value=0来填充缺失值:

wide_df = grouped_dataframe.pivot_table(
    index='Date',
    columns='Transaction type',
    values='Amount (EUR)',
    aggfunc='sum',  # 因已完成分组求和,此聚合逻辑不影响结果,仅确保数据完整性
    fill_value=0
)

步骤2:生成分组柱状图

现在直接调用plot.bar()就能得到和Seaborn效果一致的分组柱状图,还可以按需调整样式(包括指定你之前用到的ax1):

import matplotlib.pyplot as plt

# 生成柱状图,绑定到指定的ax对象
ax = wide_df.plot(kind='bar', figsize=(12, 6), ax=ax1)

# 调整图表标签与标题
ax.set_ylabel('Amount (EUR)')
ax.set_title('Monthly Transaction Amounts by Type')

# 优化图例位置,避免遮挡图表内容
ax.legend(title='Transaction type', bbox_to_anchor=(1.05, 1), loc='upper left')

# 自动调整布局,防止轴标签被截断
plt.tight_layout()
plt.show()

为什么这样可行?

转换后的宽格式数据结构会变成类似这样:

DateCash26取款直接借记收入万事达卡支付转出
2020-02-29-400.00-73.8635530.0-862.01-32415.0
..................

此时pandas会把每一列作为一个分组,在每个x轴(Date)位置上并列显示对应列的柱子,完美对应你之前用Seaborn hue参数实现的分组效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:42:03