如何在Pandas DataFrame中按月汇总金额并绘制结果图
没问题,我来帮你搞定按月汇总金额并绘图的需求~
按月汇总金额并绘制结果的实现方案
首先咱们已经确认了last_payout是datetime类型、amount是浮点型,这为后续处理打好了基础,下面是具体的实现步骤:
1. 按月分组汇总金额
这里推荐两种简洁的实现方式,你可以根据习惯选:
- 方法一:用
resample(需要先把时间列设为索引)
# 将last_payout设为索引,按自然月汇总金额后重置索引 df_monthly = df.set_index('last_payout')['amount'].resample('M').sum().reset_index()
- 方法二:提取月份周期后分组
# 从last_payout中提取"年-月"的周期格式 df['month'] = df['last_payout'].dt.to_period('M') # 按月份分组求和 df_monthly = df.groupby('month')['amount'].sum().reset_index()
两种方法最终都会得到包含月份和对应月度总金额的新DataFramedf_monthly。
2. 绘制汇总结果
咱们用matplotlib来做基础可视化,也可以换成seaborn实现更美观的样式:
基础折线图(matplotlib)
import matplotlib.pyplot as plt # 设置图形尺寸 plt.figure(figsize=(10, 6)) # 绘制折线图(如果想用柱状图,把plot换成bar即可) plt.plot(df_monthly['last_payout'].dt.to_timestamp(), df_monthly['amount']) # 添加标题和坐标轴标签 plt.title('月度金额汇总', fontsize=14) plt.xlabel('月份', fontsize=12) plt.ylabel('总金额', fontsize=12) # 旋转x轴标签避免重叠 plt.xticks(rotation=45) # 添加网格提升可读性 plt.grid(alpha=0.3) # 显示图形 plt.show()
美观柱状图(seaborn)
如果想要更精致的可视化,换用seaborn:
import seaborn as sns plt.figure(figsize=(10, 6)) sns.barplot(data=df_monthly, x='month', y='amount', palette='Blues_r') plt.title('月度金额汇总', fontsize=14) plt.xlabel('月份', fontsize=12) plt.ylabel('总金额', fontsize=12) plt.xticks(rotation=45) plt.show()
小补充
如果示例里的0值不需要计入汇总,可以先过滤数据再分组:
# 过滤掉amount为0的记录 filtered_df = df[df['amount'] > 0] # 再执行后续的分组汇总操作
内容的提问来源于stack exchange,提问作者user40
相关产品推荐
相关产品推荐

