填写缺少的日期

时间:2018-01-16 08:24:10

标签: python pandas date datetime dataframe

我的数据框包含来自不同区域和不同日期的温度读数

我想为温度为零的每个地点添加缺少的日期

例如:

df = pd.read_csv('MatplotLibTSManipulation.csv')
df.Date = pd.to_datetime(df.Date, format='%d-%m-%Y %H:%M:%S')
ax = df.set_index('Date').plot()

enter image description here

填充每个区域的日期差距(通过零)的最有效方法是什么,如下所示

Target output

非常感谢。

2 个答案:

答案 0 :(得分:3)

使用:

MultiIndex

答案 1 :(得分:2)

使用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)

接下来,使用reading_date

pd.to_datetime转换为日期时间
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

    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