如何基于自定义分组的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
相关产品推荐
相关产品推荐

