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

Python:按年份对DataFrame行数值求和的高效Pythonic实现

问题描述

我有一个包含两个datetime列和一个数值列的DataFrame,示例数据如下:

2019-01-01 00:00:00 2019-12-31 00:00:00 118433.0
2020-01-01 00:00:00 2020-12-31 00:00:00 120087.0
2021-01-01 00:00:00 2021-06-30 00:00:00 63831.0
2021-07-01 00:00:00 2021-12-31 00:00:00 63089.0
2022-01-01 00:00:00 2022-06-30 00:00:00 60753.0
2022-07-08 00:00:00 2022-11-30 00:00:00 9067.17

可以看到2019和2020年为完整年度,其余行对应不同时间区间,且每一行的起止日期均属于同一年份。需要按年份对数值列求和,得到如下结果:

2019 118422.0
2020 120087.0
2021 123842.0
2022 9067.0

要求避免简单循环,采用Pythonic的向量化/列表推导式实现。


解决方案

利用Pandas的向量化操作可高效完成需求,步骤如下:

  1. 转换日期类型并提取年份
    先将datetime列转为Pandas的datetime类型,再提取年份(因每行起止日期同一年,取任意一列提取即可):

    import pandas as pd
    
    # 假设DataFrame列名为'start_date'、'end_date'、'value'
    df['start_date'] = pd.to_datetime(df['start_date'])
    df['year'] = df['start_date'].dt.year
    
  2. 按年份分组求和
    使用groupby结合sum完成分组计算,再按要求格式输出:

    # 分组求和并保留整数位
    year_total = df.groupby('year')['value'].sum().round(0)
    
    # 输出结果
    for year, total in year_total.items():
        print(f"{year} {total}")
    
  3. 完整可运行代码

    import pandas as pd
    
    # 构造示例DataFrame
    data = [
        ('2019-01-01 00:00:00', '2019-12-31 00:00:00', 118433.0),
        ('2020-01-01 00:00:00', '2020-12-31 00:00:00', 120087.0),
        ('2021-01-01 00:00:00', '2021-06-30 00:00:00', 63831.0),
        ('2021-07-01 00:00:00', '2021-12-31 00:00:00', 63089.0),
        ('2022-01-01 00:00:00', '2022-06-30 00:00:00', 60753.0),
        ('2022-07-08 00:00:00', '2022-11-30 00:00:00', 9067.17)
    ]
    df = pd.DataFrame(data, columns=['start_date', 'end_date', 'value'])
    
    # 日期转换与年份提取
    df['start_date'] = pd.to_datetime(df['start_date'])
    df['year'] = df['start_date'].dt.year
    
    # 分组求和并输出
    year_total = df.groupby('year')['value'].sum().round(0)
    for year, total in year_total.items():
        print(f"{year} {total}")
    

    注:你给出的示例结果中2022年数值为9067.0,实际计算应为60753.0+9067.17≈69820.0,推测是示例笔误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:05:27