问题描述
我有一个像熊猫这样的数据框:
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
,最后分配回year
和querter
列:
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