如何在 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
,最后分配回 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
我在 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
,最后分配回 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