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

咨询:为油井数据库生成自首次投产起的月份计数列最优方案

解决方案:生成油井投产以来的月份计数列

针对你的需求,最合适的方案是基于日期计算分组内的月份间隔,具体步骤如下:

  1. 构建可计算的日期列
    先将year和month转换为标准日期对象(取当月第一天),方便后续计算月份差:

    df['date'] = pd.to_datetime(df[['year', 'month']].assign(day=1))
    
  2. 分组计算投产月份计数
    按油井id分组,计算每条记录的日期与该油井首次投产日期的月份间隔,最后加1(让首次投产月计数为1):

    df['month_count_calc'] = df.groupby('id')['date'].transform(
        lambda x: (x.dt.year - x.min().dt.year)*12 + (x.dt.month - x.min().dt.month) + 1
    )
    

完整验证代码

import pandas as pd

data = {
    'id' : ['A','A','A','A','B','B','C','C','C','C','C'],
    'year' : [2022,2022,2022,2022,2022,2022,2022,2022,2022,2022,2022],
    'month' : [6,7,8,9,8,9,5,6,7,8,9],
    'month_count' : [1,2,3,4,1,2,1,2,3,4,5],
}
  
df = pd.DataFrame(data)

# 生成日期列
df['date'] = pd.to_datetime(df[['year', 'month']].assign(day=1))

# 计算month_count
df['month_count_calc'] = df.groupby('id')['date'].transform(
    lambda x: (x.dt.year - x.min().dt.year)*12 + (x.dt.month - x.min().dt.month) + 1
)

# 验证结果与目标一致
print(df[['id', 'year', 'month', 'month_count', 'month_count_calc']])

方案优势

  • 支持跨年度计算:即使油井投产跨年度(比如2022年12月到2023年1月),也能准确计算为第2个月
  • 逐行生成结果:不是聚合类输出,完全满足你需要每个自然月对应计数值的需求
  • 逻辑清晰:直接基于日期差计算,避免手动处理月份排序可能出现的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:05:24