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

Pandas基于类PeriodIndex字符串补全缺失季度及均值填充问题求助

问题与解决方案

问题背景

给定以下DataFrame:

import pandas as pd
df = pd.DataFrame({'subject_id':[1,1,1,1,1,2,2,2,2,2],
                   'qtr_info' :['2017Q1','2017Q3','2017Q4','2018Q1','2018Q4','2017Q1','2017Q4','2018Q2','2018Q4','2019Q1'],
                   'val' :[5,5,5,5,1,6,5,5,8,3],
                   'Prod_id':['A','B','C','A','E','Q','G','F','G','H']})

需要完成两项任务:

  • 补全每个subject_id对应的所有缺失季度
  • 仅使用同一subject_id的列均值填充缺失值,不跨组计算

尝试使用resample方法时触发错误:

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index'

期望输出以subject_id=1为例:需补全2017Q2、2018Q2、2018Q3三个季度的行,新增行的val用该subject的均值填充,其他列可按组内规律补充。


解决方案

1. 转换季度列为周期类型

resample要求索引为时间相关类型,先将qtr_info转为Period类型:

df['qtr_info'] = pd.PeriodIndex(df['qtr_info'], freq='Q-DEC')

2. 按subject分组补全缺失季度

对每个subject_id分组,生成该组时间范围内的所有季度,再与原数据合并:

def fill_missing_quarters(group):
    # 获取当前组的时间起止
    start = group['qtr_info'].min()
    end = group['qtr_info'].max()
    # 生成该区间内的所有季度
    all_quarters = pd.period_range(start=start, end=end, freq='Q-DEC')
    # 构建包含所有季度的基础表
    full_quarters = pd.DataFrame({
        'qtr_info': all_quarters,
        'subject_id': group['subject_id'].iloc[0]
    })
    # 合并原数据,保留所有行(缺失值为NaN)
    return pd.merge(full_quarters, group, on=['subject_id', 'qtr_info'], how='left')

# 应用到所有分组并重置索引
df_complete = df.groupby('subject_id').apply(fill_missing_quarters).reset_index(drop=True)

3. 按组填充缺失值

  • 对val列:用当前subject_id的组内均值填充NaN
  • 对Prod_id列:可选用组内众数填充(若有多个众数取第一个)
# 填充val列的缺失值
df_complete['val'] = df_complete.groupby('subject_id')['val'].transform(
    lambda x: x.fillna(x.mean())
)

# 可选:填充Prod_id列的缺失值(组内众数)
def fill_with_mode(x):
    mode = x.mode()
    return x.fillna(mode.iloc[0] if not mode.empty else None)

df_complete['Prod_id'] = df_complete.groupby('subject_id')['Prod_id'].transform(fill_with_mode)

最终结果示例(subject_id=1)

subject_idqtr_infovalProd_id
12017Q15.0A
12017Q24.2A
12017Q35.0B
12017Q45.0C
12018Q15.0A
12018Q24.2A
12018Q34.2A
12018Q41.0E

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:50:24