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

基于现有DataFrame的日期范围和数值生成周期性费用新DataFrame

实现方案

前置说明

首先请确保你原始费用表的两个日期字段已经转换为Pandas datetime类型,若未转换可先执行以下代码:

import pandas as pd
import datetime

# 转换日期字段格式
fee_df['purchase_date'] = pd.to_datetime(fee_df['purchase_date'])
fee_df['date_terminated'] = pd.to_datetime(fee_df['date_terminated'])

其中fee_df为你存储周期性费用的原始DataFrame,dates_list为你给定的统计日期列表。


核心实现代码

# 1. 构造结果表的索引
stats_index = pd.DatetimeIndex(dates_list)
# 2. 初始化结果表,初始值全为NaN
result_df = pd.DataFrame(
    index=stats_index,
    columns=fee_df['id'].unique(),
    dtype='float'
)
# 3. 逐行匹配费用生效区间填充价格
for _, fee_info in fee_df.iterrows():
    fee_id = fee_info['id']
    price = fee_info['price']
    start_date = fee_info['purchase_date']
    end_date = fee_info['date_terminated']
    
    # 构造生效日期掩码
    valid_mask = (result_df.index >= start_date)
    # 有终止日期的需要额外判断小于终止日期
    if pd.notna(end_date):
        valid_mask &= (result_df.index < end_date)
    
    # 填充对应位置的价格
    result_df.loc[valid_mask, fee_id] = price

逻辑说明

填充规则完全匹配你的需求:

  • 统计日期早于费用的purchase_date:留空(NaN)
  • 统计日期在purchase_date之后,且费用无终止日期(date_terminated为NaT):一直填充对应价格
  • 统计日期在purchase_date之后、早于date_terminated:填充对应价格
  • 统计日期晚于等于date_terminated:留空(NaN)

最终得到的result_df就是你需要的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:36:04