如何生成包含START与END日期区间内所有年份的DataFrame?
生成日期区间内所有年份的DataFrame解决方案
实现步骤
- 导入依赖库
import pandas as pd
- 准备/读取原始数据
这里模拟包含START和END列的数据集:
# 示例原始数据,START、END可为日期字符串或年份数值 data = { 'START': ['2010-01-01', '2015-05-10'], 'END': ['2013-12-31', '2018-08-20'] } df = pd.DataFrame(data)
- 处理年份区间并生成目标DataFrame
# 若START/END是日期格式,先提取年份;如果已是年份数值,可跳过这两行 df['start_year'] = pd.to_datetime(df['START']).dt.year df['end_year'] = pd.to_datetime(df['END']).dt.year # 为每行生成START到END之间的所有年份列表 df['YEAR'] = df.apply(lambda row: list(range(row['start_year'], row['end_year'] + 1)), axis=1) # 将年份列表展开为多行,并清理冗余列 final_df = df.explode('YEAR').drop(['start_year', 'end_year'], axis=1) # 调整列顺序(可选,匹配目标格式) final_df = final_df[['START', 'END', 'YEAR']]
- 查看结果
运行后final_df即为所需样式,示例输出:
START END YEAR 0 2010-01-01 2013-12-31 2010 0 2010-01-01 2013-12-31 2011 0 2010-01-01 2013-12-31 2012 0 2010-01-01 2013-12-31 2013 1 2015-05-10 2018-08-20 2015 1 2015-05-10 2018-08-20 2016 1 2015-05-10 2018-08-20 2017 1 2015-05-10 2018-08-20 2018
注意事项
- 如果原始数据中
START和END直接是年份数值(如2010),无需执行日期转换,直接赋值df['start_year'] = df['START']即可 - 使用
range(row['start_year'], row['end_year'] + 1)是因为Python的range是左闭右开区间,加1才能包含结束年份
内容的提问来源于stack exchange,提问作者Hagen
相关产品推荐
相关产品推荐

