如何展开DataFrame以显示起止日期之间的所有日期
展开DataFrame以展示起止日期间的所有日期
原始数据
| start_date | end_date |
|---|---|
| 1-5-2023 | 1-10-2023 |
| 2-3-2023 | 2-10-2023 |
实现步骤
- 转换日期类型:将
start_date和end_date转为datetime格式,方便生成连续日期序列。 - 生成日期序列:对每一行生成从起始日期到结束日期的完整日期范围。
- 拆分展开行:通过
explode方法将日期序列拆分为单独的行,保留原行的起止日期信息。
完整代码
import pandas as pd # 构造原始DataFrame data = { 'start_date': ['1-5-2023', '2-3-2023'], 'end_date': ['1-10-2023', '2-10-2023'] } df = pd.DataFrame(data) # 转换为datetime类型 df['start_date'] = pd.to_datetime(df['start_date'], format='%m-%d-%Y') df['end_date'] = pd.to_datetime(df['end_date'], format='%m-%d-%Y') # 生成日期序列并展开 df['current_date'] = df.apply(lambda row: pd.date_range(row['start_date'], row['end_date']), axis=1) df = df.explode('current_date') # 转回原日期格式(可选操作) df['start_date'] = df['start_date'].dt.strftime('%m-%d-%Y') df['end_date'] = df['end_date'].dt.strftime('%m-%d-%Y') df['current_date'] = df['current_date'].dt.strftime('%m-%d-%Y') print(df)
运行结果
| start_date | end_date | current_date |
|---|---|---|
| 1-5-2023 | 1-10-2023 | 1-5-2023 |
| 1-5-2023 | 1-10-2023 | 1-6-2023 |
| 1-5-2023 | 1-10-2023 | 1-7-2023 |
| 1-5-2023 | 1-10-2023 | 1-8-2023 |
| 1-5-2023 | 1-10-2023 | 1-9-2023 |
| 1-5-2023 | 1-10-2023 | 1-10-2023 |
| 2-3-2023 | 2-10-2023 | 2-3-2023 |
| 2-3-2023 | 2-10-2023 | 2-4-2023 |
| 2-3-2023 | 2-10-2023 | 2-5-2023 |
| 2-3-2023 | 2-10-2023 | 2-6-2023 |
| 2-3-2023 | 2-10-2023 | 2-7-2023 |
| 2-3-2023 | 2-10-2023 | 2-8-2023 |
| 2-3-2023 | 2-10-2023 | 2-9-2023 |
| 2-3-2023 | 2-10-2023 | 2-10-2023 |
内容的提问来源于stack exchange,提问作者rushi
相关产品推荐
相关产品推荐

