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

如何将Pandas数据按月份分组并对X1、X2等列求和?

解决按月份分组求和的时间格式与排序问题

第一步:确保日期为datetime类型

这是解决时间格式错误的核心前提,不管Date是列还是索引,必须先转为datetime类型:

  • 读取文件时直接处理:
    import pandas as pd
    data = pd.read_csv('MLs_Unit_per_day.csv', index_col='Date', parse_dates=True)
    
  • 已读取文件后转换索引:
    data.index = pd.to_datetime(data.index)
    

第二步:按月份分组求和(修正排序问题)

直接用月份名称分组会导致字母序排序(比如"April"排在"August"前),以下是两种可靠的解决方式:

方法1:按月份数字分组,映射为名称并按自然顺序排序

# 按月份数字分组,对X1-X6列求和
monthly_sum = data.groupby(data.index.month)[['X1', 'X2', 'X3', 'X4', 'X5', 'X6']].sum()
# 将月份数字替换为完整名称
monthly_sum.index = pd.to_datetime(monthly_sum.index, format='%m').month_name()
# 按自然月份顺序重新排列
monthly_sum = monthly_sum.reindex([
    'January', 'February', 'March', 'April', 'May', 'June',
    'July', 'August', 'September', 'October', 'November', 'December'
])

方法2:按年月周期分组(保留年度信息,避免跨年度合并)

如果数据包含多个年份,建议同时按年和月分组,防止不同年份的同月份数据被错误合并:

# 按年月周期分组,自动按时间顺序排序
year_month_sum = data.groupby(data.index.to_period('M'))[['X1', 'X2', 'X3', 'X4', 'X5', 'X6']].sum()
# 若需要单独提取月份名称(需注意会丢失年度信息)
year_month_sum.index = year_month_sum.index.strftime('%Y-%B')

原代码出错原因

  • 时间格式错误:Date列/索引未转为datetime类型,无法调用dt属性,导致报错。
  • 月份排序错误:dt.strftime('%B')生成的月份名称会按字母顺序排序,而非自然的月份先后顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:28:08