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

基于ID1、ID2分组对Pandas DateIndex行向上采样含历史日期

按分组向上采样并生成每个日期子DataFrame的解决方案

嘿,我来帮你搞定这个需求!首先咱们先把你给的原始数据转换成pandas能处理的DataFrame,然后一步步实现分组向上采样,最后拆分出每个日期的子DataFrame。

第一步:准备原始数据

先把你的数据转成pandas DataFrame,同时把Date列转换成datetime类型(这是时间序列处理的关键):

import pandas as pd

# 你的原始数据
raw_data = [
    [1, 1, '2018-01-05', 75],
    [1, 1, '2018-01-06', 83],
    [1, 1, '2018-01-07', 17],
    [1, 1, '2018-01-08', 15],
    [1, 2, '2018-02-01', 85],
    [1, 2, '2018-02-02', 98],
    [2, 1, '2018-02-15', 54],
    [2, 1, '2018-02-16', 17],
    [2, 1, '2018-02-17', 83],
    [2, 1, '2018-02-18', 94],
    [2, 2, '2017-12-18', 16],
    [2, 2, '2017-12-19', 84],
    [2, 2, '2017-12-20', 47],
    [2, 2, '2017-12-21', 28],
    [2, 2, '2017-12-22', 38]
]

# 转换成DataFrame
df = pd.DataFrame(raw_data, columns=['ID1', 'ID2', 'Date', 'Values'])
# 把Date列转为datetime类型
df['Date'] = pd.to_datetime(df['Date'])

第二步:按['ID1','ID2']分组向上采样

接下来咱们要在每个分组内补全连续的日期(也就是向上采样)。这里我用按天重采样的方式,同时用前向填充来补全缺失的Values(你也可以根据需求换成后向填充bfill,或者留空用asfreq()):

# 定义分组处理函数
def upsample_single_group(group):
    # 设置Date为索引,按天重采样,填充缺失值
    resampled_group = group.set_index('Date').resample('D').ffill().reset_index()
    # 把ID1和ID2重新赋值(因为重采样后会丢失分组标识)
    resampled_group['ID1'] = group['ID1'].iloc[0]
    resampled_group['ID2'] = group['ID2'].iloc[0]
    return resampled_group

# 对每个分组应用处理函数
upsampled_full_df = df.groupby(['ID1', 'ID2']).apply(upsample_single_group).reset_index(drop=True)

第三步:拆分出每个日期的子DataFrame

现在我们已经有了补全所有连续日期的完整DataFrame,接下来可以把每个日期对应的数据拆成单独的子DataFrame,用字典存储方便后续调用:

# 按Date分组,生成子DataFrame字典
date_sub_dataframes = {date: group for date, group in upsampled_full_df.groupby('Date')}

# 举个例子,查看2018-01-06的子DataFrame
print(date_sub_dataframes[pd.to_datetime('2018-01-06')])

这段代码运行后,你就能得到每个日期对应的子DataFrame,比如上面的示例输出会是:

Date  Values  ID1  ID2
0 2018-01-06      83    1    1

额外小技巧

如果你想把每个子DataFrame保存成单独的CSV文件,可以加个循环:

for date, sub_df in date_sub_dataframes.items():
    # 把日期转成字符串作为文件名
    filename = f"daily_data_{date.strftime('%Y-%m-%d')}.csv"
    sub_df.to_csv(filename, index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:07:51