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

Python:基于日期区间生成年份哑变量的实现需求

解决方案

原始数据

id start_date end_date value 
1  2010       2014     A
2  2010       2013     C
3  2012       2013     D

实现代码

import pandas as pd

# 初始化原始DataFrame
df = pd.DataFrame({
    'id': [1, 2, 3],
    'start_date': [2010, 2010, 2012],
    'end_date': [2014, 2013, 2013],
    'value': ['A', 'C', 'D']
})

# 生成每个id对应的年份区间列表
df['year'] = df.apply(lambda row: list(range(row['start_date'], row['end_date'] + 1)), axis=1)

# 将年份列表拆分为单独行
df_exploded = df.explode('year')

# 透视转换为宽表,并重置索引
result = df_exploded.pivot(index='id', columns='year', values='value').reset_index()

# 格式化列名并按年份排序
result.columns = result.columns.astype(str)
sorted_year_cols = sorted(col for col in result.columns if col != 'id')
result = result[['id'] + sorted_year_cols]

print(result)

输出结果

id 2010 2011 2012 2013 2014
0   1    A    A    A    A    A
1   2    C    C    C    C  NaN
2   3  NaN  NaN    D    D  NaN

步骤说明

  • 用apply结合range生成每个id覆盖的完整年份列表
  • 通过explode将列表型的年份列拆分为多行,每行对应一个年份
  • 利用pivot将数据转换为以年份为列的宽表结构
  • 最后调整列名格式并按年份升序排列,匹配需求格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:50:46