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

如何在pandas中基于周数高效生成双周及月度分组标签

优化方案说明

你目前使用的逐行apply加条件判断的实现方式存在两个明显问题:一是数据量较大时性能极低,二是现有逻辑遗漏了Week=1的处理,会返回空值不符合「1、2周标注为2」的规则。

可以直接用pandas向量化运算实现需求,全程不需要自定义函数和逐行判断,不仅能覆盖全年52周的所有场景,性能还能提升几十到上百倍。

双周列计算

按照规则(1、2周标2,3、4周标4,以此类推),直接用整数除法即可实现:

prof_calc['Bi-Weekly'] = ((prof_calc['Week'] + 1) // 2 * 2).astype(int)

数值验证:

  • Week=1:(1+1)//2=1 → 1*2=2 符合要求
  • Week=2:(2+1)//2=1 → 1*2=2 符合要求
  • Week=3:(3+1)//2=2 → 2*2=4 符合要求
  • Week=52:(52+1)//2=26 → 26*2=52 符合要求

月度列计算

按照1-4周归属为月份1的规则,计算逻辑如下:

prof_calc['Monthly'] = ((prof_calc['Week'] - 1) // 4 + 1).astype(int)

数值验证:

  • Week=4:(4-1)//4=0 → 0+1=1 符合要求
  • Week=5:(5-1)//4=1 →1+1=2 符合要求
  • Week=52:(52-1)//4=12 →12+1=13 符合4周为1个统计月的规则

完整测试代码

import pandas as pd

# 构造示例数据
data = {
    'ID': ['A', 'A', 'A', 'A'],
    'Week': [1, 2, 3, 4],
    'Profit': [2, 2, 0, 0]
}
prof_calc = pd.DataFrame(data)

# 新增两列
prof_calc['Bi-Weekly'] = ((prof_calc['Week'] + 1) // 2 * 2).astype(int)
prof_calc['Monthly'] = ((prof_calc['Week'] - 1) // 4 + 1).astype(int)

# 分组统计示例
# 按双周统计利润
biweek_profit = prof_calc.groupby(['ID', 'Bi-Weekly'])['Profit'].sum().reset_index()
# 按月度统计利润
monthly_profit = prof_calc.groupby(['ID', 'Monthly'])['Profit'].sum().reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:57:01