如何在熊猫数据框中为缺少的年份和季度创建行

问题描述

我有一个像熊猫这样的数据框:

year quarter value
2018  3     100
2018  4     200
2019  2     300
2019  3     380
2020  1     400

在此我想缺少2019-1,2019-4年。我想用先前的行值创建并填充这些值。这样,输出数据帧将一直持续到当前的本年度季度2020-3:

year quarter value
2018  3     100
2018  4     200
2019  1     300
2019  2     300
2019  3     380
2019  4     380
2020  1     400
2020  2     400
2020  3     400

解决方法

您可以通过将两列都转换为季度周期来创建quarter PeriodIndex,然后在DataFrame.reindex之前使用period_range,最后分配回yearquerter列:

idx = pd.to_datetime(df['year'].astype(str) + 'q' + 
                     df['quarter'].astype(str)).dt.to_period('q')
per = pd.Timestamp('now').to_period('q')

df = (df.set_index(idx)
        .reindex(pd.period_range(idx.min(),per),method='ffill')
        .assign(year = lambda x: x.index.year,quarter = lambda x: x.index.quarter))
print (df)
        year  quarter  value
2018Q3  2018        3    100
2018Q4  2018        4    200
2019Q1  2019        1    200
2019Q2  2019        2    300
2019Q3  2019        3    380
2019Q4  2019        4    380
2020Q1  2020        1    400
2020Q2  2020        2    400
2020Q3  2020        3    400

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...