如何在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
相关产品推荐
相关产品推荐

