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

Pandas DataFrame按Delivery Period时间区间拆分多行并标准化日期格式的实现需求

Pandas DataFrame按Delivery Period时间区间拆分多行并标准化日期格式的实现需求

看起来你需要处理DataFrame中Delivery Period列的两种格式数据:一种是跨多个月的日期区间(如"2025-01-01 to 2025-12-31"),需要拆分成每个单独月份的行并统一格式为"Month Year";另一种是已经符合格式的单月份数据,直接保留即可。下面是完整的实现方案:

步骤1:导入依赖库

首先确保你已经安装了pandas和python-dateutil,然后导入必要的库:

import pandas as pd
from dateutil import parser

步骤2:构建原始DataFrame

先把你提供的示例数据转换成DataFrame:

data_dict_cols = {
    'Price Curve': [
        "TEST", "some curve", "some curve", "some curve",
        "some curve", "some curve", "some curve", "some curve"
    ],
    'Text': [
        "TEST", "some text", "some text", "some text",
        "some text", "some text", "some text", "some text"
    ],
    'Delivery Period': [
        "2025-01-01 to 2025-12-31", "June 2025", "July 2025",
        "August 2025", "September 2025", "October 2025",
        "November 2025", "December 2025"
    ]
}
df = pd.DataFrame(data_dict_cols)

步骤3:编写日期区间处理函数

我们需要一个自定义函数,用来解析每个Delivery Period值:如果是区间格式,生成区间内所有月份的"Month Year"字符串;如果是单月份格式,直接返回包含原字符串的列表(方便后续拆分)。

def expand_delivery_period(period_str):
    # 识别是否为日期区间格式
    if 'to' in period_str:
        # 拆分起始和结束日期
        start_date_str, end_date_str = period_str.split(' to ')
        start_date = parser.parse(start_date_str)
        end_date = parser.parse(end_date_str)
        
        # 生成区间内每个月的第一天,再格式化为目标格式
        months = pd.date_range(start=start_date, end=end_date, freq='MS')
        return [month.strftime('%B %Y') for month in months]
    else:
        # 已经是单月份格式,返回列表形式便于explode
        return [period_str]

步骤4:应用函数并展开多行

对Delivery Period列应用处理函数,再用explode将列表拆分为单独的行:

# 生成每个行对应的月份列表
df['Delivery Period'] = df['Delivery Period'].apply(expand_delivery_period)
# 展开列表为独立行,重置索引
df_expanded = df.explode('Delivery Period').reset_index(drop=True)

验证结果

运行后打印df_expanded,就能得到你期望的输出:TEST行被拆分成12个月份的独立行,其他单月份行保持不变,所有Delivery Period都统一为"Month Year"格式。

关键细节说明

  • pd.date_range的freq='MS'参数确保生成每个月的第一天,完美覆盖区间内的所有月份。
  • strftime('%B %Y')用来将日期格式化为完整月份名称+年份(如January 2025)。
  • explode方法会自动将列表格式的单元格内容拆分为多行,同时保留其他列的对应值,完全符合你的需求。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:18:05