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

如何实现特定日期区间内的数据外推与重复映射?

问题描述

原始数据:

start        end        nominal
1   8/23/2021   9/15/2021   10000
2   9/1/2021    9/15/2021   100500
3   9/2/2021    9/15/2021   30000
4   9/3/2021    9/15/2021   2200

需要转换为以下格式:生成从start列最早日期到end列最晚日期的连续日期序列,将每条数据的nominal值(示例中为原数值除以10)映射到对应的日期区间内:

date                  1       2       3      4      
2021-08-23 00:00:00 1000                    
2021-08-24 00:00:00 1000                    
...
2021-09-15 00:00:00 1000    10050   3000    2200        
解决方案

可以用Pandas的日期序列生成、区间匹配和透视表实现,步骤如下:

  1. 数据预处理
    将日期列转为datetime类型,同时按示例要求处理nominal值:
import pandas as pd

# 加载原始数据
data = {
    'start': ['8/23/2021', '9/1/2021', '9/2/2021', '9/3/2021'],
    'end': ['9/15/2021', '9/15/2021', '9/15/2021', '9/15/2021'],
    'nominal': [10000, 100500, 30000, 2200]
}
df = pd.DataFrame(data, index=[1,2,3,4])

# 转换日期格式,处理数值(示例中nominal除以10)
df['start'] = pd.to_datetime(df['start'])
df['end'] = pd.to_datetime(df['end'])
df['value'] = df['nominal'] // 10
  1. 生成连续日期序列
    确定日期范围,生成每日连续序列:
min_date = df['start'].min()
max_date = df['end'].max()
date_range = pd.date_range(start=min_date, end=max_date, freq='D')
date_df = pd.DataFrame({'date': date_range})
  1. 匹配区间并透视成目标格式
    为每条原始数据匹配对应日期区间,再通过透视表转换结构:
# 展开每条数据对应的日期行
expanded_rows = []
for idx, row in df.iterrows():
    # 筛选当前数据覆盖的日期
    mask = (date_df['date'] >= row['start']) & (date_df['date'] <= row['end'])
    temp = date_df[mask].copy()
    temp['id'] = idx
    temp['value'] = row['value']
    expanded_rows.append(temp)

# 合并所有行并透视
combined_df = pd.concat(expanded_rows, ignore_index=True)
result = combined_df.pivot(index='date', columns='id', values='value').fillna('')

# 调整格式:去掉列名标签、格式化日期显示
result.columns.name = None
result.index = result.index.strftime('%Y-%m-%d 00:00:00')
  1. 输出结果
print(result.to_string())

运行后即可得到目标格式的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:48:14