如何将DataFrame的MinYear与MaxYear列转换为连续年份行
解决DataFrame年份范围展开问题
核心思路
用Pandas的apply为每行生成倒序的年份序列,再通过explode把列表拆分为多行,最后移除原有的MinYear和MaxYear列即可实现需求。
代码实现
- 构造原始DataFrame:
import pandas as pd df = pd.DataFrame({ 'Value': ['5,2', '3,3'], 'MinYear': [1997, 1996], 'MaxYear': [2000, 2000] })
- 生成年份序列并展开:
# 为每行生成从MaxYear到MinYear的倒序年份列表 df['Year'] = df.apply(lambda row: list(range(row['MaxYear'], row['MinYear'] - 1, -1)), axis=1) # 将列表列拆分为多行,同时删除原年份范围列 result_df = df.explode('Year').drop(columns=['MinYear', 'MaxYear'])
执行后得到的结果如下:
| Value | Year |
|---|---|
| 5,2 | 2000 |
| 5,2 | 1999 |
| 5,2 | 1998 |
| 5,2 | 1997 |
| 3,3 | 2000 |
| 3,3 | 1999 |
| 3,3 | 1998 |
| 3,3 | 1997 |
| 3,3 | 1996 |
补充说明
你提供的期望结果中,第二组Value=3,3的年份包含1995,但原始数据的MinYear是1996,这大概率是笔误。如果确实需要包含1995,只需调整range的结束值:
df['Year'] = df.apply(lambda row: list(range(row['MaxYear'], row['MinYear'] - 2, -1)), axis=1)
内容的提问来源于stack exchange,提问作者Philipp Schulz
相关产品推荐
相关产品推荐

