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

如何在Pandas DataFrame中根据索引重置添加月份字段

问题

现有如下Pandas DataFrame:

import pandas as pd
df = pd.DataFrame({'index': [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
         'data': [1.5, 0.22, 0.323, 4.4, 5.62, 0.56, 1.32, 2.1, 3.09, 4, 5.3, 0.6]})

需求:当index列的值重新从1开始计数时,为对应的数据组分配指定月份;月份分配无固定规律,已准备好目标月份列表months = ["April", "June"],期望得到如下带Month字段的DataFrame:

df = pd.DataFrame({'index': [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6], 
          'data': [1.5, 0.22, 0.323, 4.4, 5.62, 0.56, 1.32, 2.1, 3.09, 4, 5.3, 0.6],
         'Month': ['April', 'April', 'April', 'April', 'April', 'April', 'June', 'June', 'June', 'June', 'June', 'June'] })
解决方案

通过识别index列中值为1的位置划分数据组,再将月份列表映射到对应组即可实现需求,具体步骤如下:

  1. 生成组编号:利用index == 1生成布尔序列,通过cumsum()累计求和得到每个数据组的编号,调整编号从0开始以匹配月份列表的索引
  2. 映射月份:将组编号与月份列表对应,为每组数据分配对应月份

完整代码:

import pandas as pd

# 原数据
df = pd.DataFrame({'index': [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
         'data': [1.5, 0.22, 0.323, 4.4, 5.62, 0.56, 1.32, 2.1, 3.09, 4, 5.3, 0.6]})
months = ["April", "June"]

# 生成组编号
df['group_id'] = (df['index'] == 1).cumsum() - 1
# 映射月份
df['Month'] = df['group_id'].map(lambda x: months[x])
# 移除临时组编号列
df = df.drop('group_id', axis=1)

print(df)

运行后即可得到目标格式的DataFrame,核心逻辑是通过index == 1的累计和区分不同数据块,每次出现1就代表新组开始,累计和递增后刚好对应月份列表的索引位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:15:20