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

如何对多分组Pandas DataFrame重采样,使各组合日期数一致?

解决Pandas日期范围补0计数问题

实现步骤

  1. 统一日期字段格式
    先把原始DataFrame的date列转为datetime类型,避免后续日期处理出错:

    import pandas as pd
    # 假设原始数据框名为df
    df['date'] = pd.to_datetime(df['date'])
    
  2. 生成完整日期序列
    按照需求生成2020-01-01到2020-01-05的全部日期:

    full_dates = pd.date_range(start='2020-01-01', end='2020-01-05', freq='D')
    
  3. 生成全量组合(笛卡尔积)
    提取person_id、event、mode的唯一组合,再和完整日期序列做笛卡尔积,得到所有应存在的(date, person_id, event, mode)组合:

    # 获取唯一的(person_id, event, mode)分组
    unique_groups = df[['person_id', 'event', 'mode']].drop_duplicates()
    # 生成笛卡尔积补全所有日期-分组组合
    full_combinations = unique_groups.assign(key=1).merge(pd.DataFrame({'date': full_dates, 'key': 1}), on='key').drop('key', axis=1)
    
  4. 统计原始数据的每日计数
    对原始数据按person_id、event、mode、date分组,统计每组的记录条数:

    daily_counts = df.groupby(['person_id', 'event', 'mode', 'date']).size().reset_index(name='count')
    
  5. 合并补0
    将全量组合数据和统计结果左连接,把缺失的计数填充为0:

    df_summarized = full_combinations.merge(daily_counts, on=['person_id', 'event', 'mode', 'date'], how='left').fillna({'count': 0})
    

验证结果

运行你指定的验证代码,确认每个(person_id, event, mode)组合的唯一日期数均为5:

validation = df_summarized.groupby(['person_id', 'event', 'mode'])['date'].nunique().reset_index()
# 输出查看结果,所有nunique值应为5
print(validation)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:12:36