Python 填写缺失的日期

Python 填写缺失的日期,python,pandas,date,datetime,dataframe,Python,Pandas,Date,Datetime,Dataframe,我有一个数据框,包含来自不同地区和不同日期的温度读数 我想为温度为零的每个位置添加缺少的日期 例如: df=pd.DataFrame({"area_id":[1,1,1,2,2,2,3,3,3], "reading_date":["13/1/2017","15/1/2017" ,"16/1/2017","22/3/2017","26/3/2017"

我有一个数据框,包含来自不同地区和不同日期的温度读数

我想为温度为零的每个位置添加缺少的日期

例如:

df=pd.DataFrame({"area_id":[1,1,1,2,2,2,3,3,3],
                 "reading_date":["13/1/2017","15/1/2017"
                                 ,"16/1/2017","22/3/2017","26/3/2017"
                                 ,"28/3/2017","15/5/2017"
                                 ,"16/5/2017","18/5/2017"],
                 "temp":[12,15,22,6,14,8,30,25,33]})

如下图所示,用什么最有效的方法来填补每个区域的日期差距(用零表示)

非常感谢。

使用:

  • 首先转换为datetime列
    读取日期
    by
  • 对于
    DatetimeIndex
    groupby
    ,使用
    resample
  • 对于
    系列
    添加
  • NaN
    s替换为
  • 上次添加来自
    多索引的列


使用
reindex
。定义一个自定义函数来处理重新索引操作,并在
groupby.apply中调用它

def reindex(x):
    # Thanks to @jezrael for the improvement.
    return x.reindex(pd.date_range(x.index.min(), x.index.max()), fill_value=0)
接下来,首先使用pd将读取日期转换为日期时间

df.reading_date = pd.to_datetime(df.reading_date)
现在,执行一个
groupby

df = (
    df.set_index('reading_date')
      .groupby('area_id')
      .temp
      .apply(reindex)
      .reset_index()
)

df.columns = ['area_id', 'reading_date', 'temp']

df = (
    df.set_index('reading_date')
      .groupby('area_id')
      .temp
      .apply(reindex)
      .reset_index()
)

df.columns = ['area_id', 'reading_date', 'temp']
df

    area_id reading_date  temp
0         1   2017-01-13  12.0
1         1   2017-01-14   0.0
2         1   2017-01-15  15.0
3         1   2017-01-16  22.0
4         2   2017-03-22   6.0
5         2   2017-03-23   0.0
6         2   2017-03-24   0.0
7         2   2017-03-25   0.0
8         2   2017-03-26  14.0
9         2   2017-03-27   0.0
10        2   2017-03-28   8.0
11        3   2017-05-15  30.0
12        3   2017-05-16  25.0
13        3   2017-05-17   0.0
14        3   2017-05-18  33.0