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

