如何在 pandas 数据框中为缺失的年份和季度创建行

How to create rows for missing years and quarters in pandas dataframe

我在 pandas 中有一个数据框,例如:

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

您可以通过将两列都转换为季度周期然后使用 DataFrame.reindex by period_range 创建 quarter PeriodIndex,最后分配回 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