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

使用Pandas生成包含买卖日期及区间内各月首尾日期的新DataFrame

高效生成日期区间序列的Pandas方案

这是个很实用的日期序列生成需求,我来分享一个基于Pandas内置工具的高效实现,既能处理单条记录,也能扩展到整个DataFrame:

步骤1:定义生成单条记录序列的函数

我们可以利用Pandas的date_range和日期偏移工具MonthBegin、MonthEnd来精准生成所需的日期点,避免手动计算月份的麻烦:

import pandas as pd
from pandas.tseries.offsets import MonthBegin, MonthEnd

def generate_date_sequence(buy_date, sell_date):
    # 统一转换为datetime类型,兼容字符串输入
    buy_date = pd.to_datetime(buy_date)
    sell_date = pd.to_datetime(sell_date)
    
    # 生成买入月之后到卖出月之前的所有月份的第一天(MS=月初频率)
    middle_months = pd.date_range(
        start=buy_date + MonthBegin(1), 
        end=sell_date - MonthBegin(1), 
        freq='MS'
    )
    
    # 对应生成这些月份的最后一天
    month_ends = middle_months + MonthEnd(0)
    
    # 合并所有需要的日期:买入日 + 中间月的月初月末 + 卖出日
    all_dates = pd.concat([
        pd.Series([buy_date]),
        pd.Series(middle_months),
        pd.Series(month_ends),
        pd.Series([sell_date])
    ])
    
    # 排序并去重(处理买入日是月初/卖出日是月末的重复情况)
    all_dates = all_dates.sort_values().drop_duplicates().reset_index(drop=True)
    
    # 转为指定格式的DataFrame
    return pd.DataFrame({'Date': all_dates.dt.strftime('%Y-%m-%d')})

步骤2:测试单条记录

用你给出的示例数据测试:

buy_date = '2000-01-04'
sell_date = '2000-04-15'
result = generate_date_sequence(buy_date, sell_date)
print(result)

输出结果正好符合你的预期:

Date
0  2000-01-04
1  2000-01-31
2  2000-02-01
3  2000-02-28
4  2000-03-01
5  2000-03-31
6  2000-04-01
7  2000-04-15

步骤3:扩展到整个DataFrame

如果你的原DataFrame有多条记录,可以通过循环来批量处理:

# 示例原DataFrame
original_df = pd.DataFrame({
    'buying date': ['2000-01-04', '2021-05-10'],
    'selling date': ['2000-04-15', '2021-07-20']
})

# 批量生成并合并结果
final_result = []
for _, row in original_df.iterrows():
    seq_df = generate_date_sequence(row['buying date'], row['selling date'])
    # 可选:保留原记录的关联信息,比如添加ID列
    # seq_df['record_id'] = _
    final_result.append(seq_df)

final_df = pd.concat(final_result, ignore_index=True)
print(final_df)

方案优势

  • 高效性:全部使用Pandas的向量化日期操作,比手动循环每一天快得多,处理大量数据时优势明显
  • 准确性:依赖Pandas内置的日期偏移工具,自动处理闰年、不同月份天数的问题,避免手动计算出错
  • 灵活性:可以轻松调整格式,或者添加更多关联信息到结果中

内容的提问来源于stack exchange,提问作者bjorks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:32:44