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

如何在Pandas中按年份将指定前N个月的Indicator列设为True

解决方案:按年度前N个月设置Indicator列

核心思路

利用DataFrame日期索引的月份属性,通过可配置参数n_months判断每行月份是否属于当年前N个月,直接生成布尔值赋值给Indicator列,实现灵活调整。

完整实现代码

import pandas as pd
from pandas import Timestamp
nan = 0

# 构建用户提供的原始DataFrame
data = {'Price': {Timestamp('2018-01-01 00:00:00', freq='MS'): 100,
  Timestamp('2018-02-01 00:00:00', freq='MS'): 100,
  Timestamp('2018-03-01 00:00:00', freq='MS'): 105,
  Timestamp('2018-04-01 00:00:00', freq='MS'): 105,
  Timestamp('2018-05-01 00:00:00', freq='MS'): 105,
  Timestamp('2018-06-01 00:00:00', freq='MS'): 108,
  Timestamp('2018-07-01 00:00:00', freq='MS'): 108,
  Timestamp('2018-08-01 00:00:00', freq='MS'): 108,
  Timestamp('2018-09-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-10-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-11-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-12-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-01-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-02-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-03-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-04-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-05-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-06-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-07-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-08-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-09-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-10-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-11-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-12-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-01-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-02-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-03-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-04-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-05-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-06-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-07-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-08-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-09-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-10-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-11-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-12-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-01-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-02-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-03-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-04-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-05-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-06-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-07-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-08-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-09-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-10-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-11-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-12-01 00:00:00', freq='MS'): nan,
  Timestamp('2022-01-01 00:00:00', freq='MS'): 210,
  Timestamp('2022-02-01 00:00:00', freq='MS'): 200,
  Timestamp('2022-03-01 00:00:00', freq='MS'): 261,
  Timestamp('2022-04-01 00:00:00', freq='MS'): 220,
  Timestamp('2022-05-01 00:00:00', freq='MS'): 200,
  Timestamp('2022-06-01 00:00:00', freq='MS'): 180,
  Timestamp('2022-07-01 00:00:00', freq='MS'): 185,
  Timestamp('2022-08-01 00:00:00', freq='MS'): 200,
  Timestamp('2022-09-01 00:00:00', freq='MS'): 175.0,
  Timestamp('2022-10-01 00:00:00', freq='MS'): 175.0,
  Timestamp('2022-11-01 00:00:00', freq='MS'): 175.0,
  Timestamp('2022-12-01 00:00:00', freq='MS'): 175.0},
 'Vol': {Timestamp('2018-01-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-02-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-03-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-04-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-05-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-06-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-07-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-08-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-09-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-10-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-11-01 00:00:00', freq='MS'): nan,
  Timestamp('2018-12-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-01-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-02-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-03-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-04-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-05-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-06-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-07-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-08-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-09-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-10-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-11-01 00:00:00', freq='MS'): nan,
  Timestamp('2019-12-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-01-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-02-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-03-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-04-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-05-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-06-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-07-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-08-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-09-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-10-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-11-01 00:00:00', freq='MS'): nan,
  Timestamp('2020-12-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-01-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-02-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-03-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-04-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-05-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-06-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-07-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-08-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-09-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-10-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-11-01 00:00:00', freq='MS'): nan,
  Timestamp('2021-12-01 00:00:00', freq='MS'): nan,
  Timestamp('2022-01-01 00:00:00', freq='MS'): 16000,
  Timestamp('2022-02-01 00:00:00', freq='MS'): 10000,
  Timestamp('2022-03-01 00:00:00', freq='MS'): 12000,
  Timestamp('2022-04-01 00:00:00', freq='MS'): 40000,
  Timestamp('2022-05-01 00:00:00', freq='MS'): 20222,
  Timestamp('2022-06-01 00:00:00', freq='MS'): 67885,
  Timestamp('2022-07-01 00:00:00', freq='MS'): 12345,
  Timestamp('2022-08-01 00:00:00', freq='MS'): 5654,
  Timestamp('2022-09-01 00:00:00', freq='MS'): 75334,
  Timestamp('2022-10-01 00:00:00', freq='MS'): 45653,
  Timestamp('2022-11-01 00:00:00', freq='MS'): 432467,
  Timestamp('2022-12-01 00:00:00', freq='MS'): 457543}}

df = pd.DataFrame.from_dict(data)

# --------------------------
# 关键逻辑:设置Indicator列
# --------------------------
# 可调整参数:指定每年前N个月
n_months = 6

# 利用索引的月份属性生成布尔值,赋值给Indicator列
df['Indicator'] = df.index.month <= n_months

# 查看结果
print(df)

关键说明

  • 灵活调整范围:修改n_months的值即可切换目标月份范围,比如设为3就是每年前3个月,设为10就是前10个月。
  • 自动按年度判断:`df.index
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:01:08