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

如何在Python中按月份条件生成递增年份的日期列?

在Python中实现Excel的年份递增逻辑

先假设你的日度时间序列数据已经导入到pandas的DataFrame里,原L列对应DataFrame的month列,现在要生成对应年份的列(原M列)。

核心逻辑

和Excel里的=IF(L3=L2,M2,M2+1)逻辑一致:同一月份沿用前一行年份,月份切换时年份+1,初始年份设为2000。

高效实现(适合大数据集)

用pandas的向量化操作,比循环快得多:

import pandas as pd

# 替换成你的真实数据,比如读取Excel文件
df = pd.read_excel('你的数据文件.xlsx')  # 假设原L列的列名为'month'

# 初始化年份列,首行设为2000
df['year'] = 2000

# 标记月份切换的位置:当前行和上一行月份不同则为1,否则为0
month_switch = (df['month'] != df['month'].shift(1)).astype(int)
# 累加切换次数,得到每个位置需要递增的年份数
year_offset = month_switch.cumsum()
# 计算最终年份
df['year'] = 2000 + year_offset

# 如果要转成日期格式(比如对应年月的第一天)
df['date'] = pd.to_datetime(df[['year', 'month']].assign(day=1))

直观循环实现(适合小数据集)

如果数据量不大,用循环更贴近Excel的逻辑,容易理解:

import pandas as pd

df = pd.read_excel('你的数据文件.xlsx')
df['year'] = 2000  # 首行年份设为2000

for idx in range(1, len(df)):
    if df.loc[idx, 'month'] == df.loc[idx-1, 'month']:
        df.loc[idx, 'year'] = df.loc[idx-1, 'year']
    else:
        df.loc[idx, 'year'] = df.loc[idx-1, 'year'] + 1

# 转日期格式
df['date'] = pd.to_datetime(df['year'].astype(str) + '-' + df['month'].astype(str) + '-01')

补充说明

你Excel里用M2+366是因为操作的是日期格式加一年,Python里直接操作年份数值更直接,最后按需转成日期格式即可。向量化操作的方式在数据量大时(比如几万行以上)比循环效率高很多,优先推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:55:37