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

如何基于自定义分组的Pandas DataFrame创建条形图?

解决方案

要生成你需要的分组条形图(每个时间区间对应不同加密货币的条形),核心是先把长格式的DataFrame转换为宽格式,让每个加密货币作为单独的列,时间作为索引。以下是具体实现步骤:

1. 转换数据格式

使用pivot_table将数据重构为宽格式,确保每个date_group对应一行,BTC和USDC作为列,值取dollar的总和(如果同一时间区间有重复数据会自动聚合):

import pandas as pd
import matplotlib.pyplot as plt

# 你的原始数据
data = {
    'date_group': ['2023-05-24 21:00:00-03:00', '2023-05-24 21:30:00-03:00', '2023-05-24 21:30:00-03:00'],
    'crypto': ['BTC', 'BTC', 'USDC'],
    'dollar': [-16147765, -44579879, 8378950]
}
df = pd.DataFrame(data)

# 转换为宽格式
wide_df = df.pivot_table(index='date_group', columns='crypto', values='dollar', aggfunc='sum').fillna(0)

2. 绘制分组条形图

调用plot.bar()生成目标图表,同时优化x轴标签显示避免重叠:

ax = wide_df.plot(kind='bar', figsize=(10, 6), rot=45)

# 添加图表标签和标题
ax.set_xlabel('时间区间')
ax.set_ylabel('金额')
ax.set_title('各加密货币30分钟区间金额变化')

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

关键说明

  • 长格式转宽格式是核心:原始数据中同一时间区间对应多行不同加密货币的数据,而分组条形图要求同一时间点的不同类别(加密货币)在同一行,所以必须用pivot或pivot_table转换。
  • fillna(0)是为了处理某个时间区间只有单一加密货币数据的情况(比如你的第一行只有BTC),避免出现空值导致条形缺失。
  • rot=45旋转x轴标签,防止长日期字符串重叠影响可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:22:22