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

如何通过函数按条件计算多维度季节性求和?

更简洁的实现方案

可以利用Pandas的分箱、映射、分组聚合能力,一次性完成所有计算,避免繁琐的逐块拆分:

步骤说明

  1. 筛选夏季数据:提取日期中的年份和月份,只保留6-8月的记录
  2. 纬度区间分箱:用pd.cut将latitude直接划分为指定的三个区间
  3. 生成加权count:通过字典映射region到对应系数,计算count * 系数
  4. 分组聚合重塑:按年份和纬度区间分组求和,最后转成目标格式的DataFrame

完整代码

import pandas as pd
import numpy as np

# 测试数据生成
df_test = pd.DataFrame({
    'date': pd.date_range('2019-01-01', '2021-12-31', periods=360),
    'latitude': np.linspace(50, 90, 360),
    'region': ['land', 'ocean', 'coast'] * 120,
    'count': [1, 2, 3] * 120,
})
df_test['date'] = pd.to_datetime(df_test['date'])

# 1. 提取年份和月份,筛选夏季(6-8月)数据
df_test['year'] = df_test['date'].dt.year
summer_mask = df_test['date'].dt.month.isin([6,7,8])
df_summer = df_test[summer_mask]

# 2. 对latitude进行分箱,指定区间和标签
lat_bins = [60,70,80,90]
lat_labels = ['60-70', '70-80', '80-90']
df_summer['lat_interval'] = pd.cut(df_summer['latitude'], bins=lat_bins, labels=lat_labels, include_lowest=True)

# 3. 映射region到系数,计算加权count
region_coeff = {'land':2, 'ocean':4, 'coast':8}
df_summer['weighted_count'] = df_summer['count'] * df_summer['region'].map(region_coeff)

# 4. 分组求和并重塑为目标格式
result = df_summer.groupby(['year', 'lat_interval'])['weighted_count'].sum().unstack()

# 调整索引/列名称(可选,让结果更贴合需求)
result.index.name = None
result.columns.name = None

print(result)

代码优势

  • 避免了重复的子集拆分和逐块计算,代码更简洁易维护
  • 利用Pandas内置的向量化操作,计算效率更高(尤其是大数据集)
  • 自动处理所有年份和区间的组合,无需手动逐个拼接结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:46:06