首页 > 解决方案 > 为 Pandas 中的每个组填充缺失的日期和回填值

问题描述

我尝试year2015~2019每个city和s 中填写错过bfillvalues。

  city  year  value
0   bj  2017     15
1   bj  2019     17
2   sh  2015     23
3   sh  2016     24
4   sh  2019     16

我怎样才能得到这样的预期结果?谢谢。

  city  year  value
0   bj  2015     15
1   bj  2016     15
2   bj  2017     15
3   bj  2018     17
4   bj  2019     17
5   sh  2015     23
6   sh  2016     24
7   sh  2017     16
8   sh  2018     16
9   sh  2019     16

我尝试使用下面的代码来创建cityyear配对:

rng = pd.date_range('2015', '2019', freq='YS').year
c = df['city'].unique()
mux = pd.MultiIndex.from_product([c, rng], names=['city','year'])
print(mux)

我得到:

MultiIndex([('bj', 2015),
            ('bj', 2016),
            ('bj', 2017),
            ('bj', 2018),
            ('bj', 2019),
            ('sh', 2015),
            ('sh', 2016),
            ('sh', 2017),
            ('sh', 2018),
            ('sh', 2019)],
           names=['city', 'year'])

标签: python-3.xpandasdataframe

解决方案


在 DaatFrame 中使用DataFrame.reindexby创建,然后由第一级使用:MultiIndexDataFrame.set_indexGroupBy.bfillcity

df = df.set_index(['city','year']).reindex(mux).groupby(level=0).bfill().reset_index()
print (df)
  city  year  value
0   bj  2015   15.0
1   bj  2016   15.0
2   bj  2017   15.0
3   bj  2018   17.0
4   bj  2019   17.0
5   sh  2015   23.0
6   sh  2016   24.0
7   sh  2017   16.0
8   sh  2018   16.0
9   sh  2019   16.0

推荐阅读