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

pandas dataframe groupby后如何补全分组缺失日期生成30天完整窗口

实现方案

首先做基础数据预处理:

  1. 修正原有groupby代码的语法错误(缺右引号),并将日期列转为pandas的datetime格式:
import pandas as pd

# 若你原数据第一列列名为`Data`,请替换下方所有`Date`为`Data`即可
df_daily['Date'] = pd.to_datetime(df_daily['Date'])
  1. 定义你需要补全的30天日期范围:
# 可根据实际需求自定义起始日期
start_date = '2021-01-01'
target_date_range = pd.date_range(start=start_date, periods=30, name='Date')

方法1:分组重索引实现(推荐分组操作场景)

对每个(type, state)分组的日期索引做重索引,自动补全缺失日期:

df_output = df_daily.set_index('Date') \
            .groupby(['type', 'state'], group_keys=False) \
            .apply(lambda group: group.reindex(target_date_range)) \
            .reset_index()

该方法会自动将缺失的price字段填充为NaN,type和state字段会自动继承分组对应值,完全符合你给出的输出效果。

方法2:全量组合左连接实现(逻辑更直观)

先构造所有日期、车型、州的全量组合,再左关联原始数据匹配价格:

# 提取所有唯一的(车型,州)组合
type_state_pairs = df_daily[['type', 'state']].drop_duplicates()
# 生成日期+车型+州的所有可能组合
all_combinations = pd.MultiIndex.from_product(
    [target_date_range, type_state_pairs['type'], type_state_pairs['state']],
    names=['Date', 'type', 'state']
).to_frame(index=False)
# 左连接匹配原始价格,缺失值自动为NaN
df_output = all_combinations.merge(df_daily, on=['Date', 'type', 'state'], how='left')

如果需要每个分组单独按自身最早日期往后推30天,只需修改方法1中的日期范围生成逻辑即可:

df_output = df_daily.set_index('Date') \
            .groupby(['type', 'state'], group_keys=False) \
            .apply(lambda group: group.reindex(pd.date_range(group.index.min(), periods=30))) \
            .reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:24:02