在熊猫数据框中以间隔的日期填写缺失的观测值

时间:2019-11-18 09:21:57

标签: pandas datetime missing-data

让我们说我有以下熊猫数据框:

+---------------------+---------+-------+-----+
| observed_cats_count |  year   | month | day |
+---------------------+---------+-------+-----+
|                   2 |    2019 |    10 |  19 |
|                   3 |    2019 |    10 |  18 |
|                   5 |    2019 |    10 |  16 |
+---------------------+---------+-------+-----+

还有两个边界日期,例如2019-10-152019-10-20,我知道所有缺失的观测值都应具有observed_cats_count=0

如何为间隔中的所有缺失日期插入一行并获取以下数据框:

+---------------------+---------+-------+-----+
| observed_cats_count |  year   | month | day |
+---------------------+---------+-------+-----+
|                   0 |    2019 |    10 |  20 |
|                   2 |    2019 |    10 |  19 |
|                   3 |    2019 |    10 |  18 |
|                   0 |    2019 |    10 |  17 |
|                   5 |    2019 |    10 |  16 |
|                   0 |    2019 |    10 |  15 |
+---------------------+---------+-------+-----+

2 个答案:

答案 0 :(得分:2)

我将使用pd.date_range来构建一个新的数据框,然后合并回dffillna

dates = pd.date_range('2019-10-20', '2019-10-15', freq='-1D')
df1 = pd.DataFrame({'year': dates.year, 'month': dates.month, 'day': dates.day})
df2 = df1.merge(df, how='left').fillna(0)

Out[413]:
   year  month  day  observed_cats_count
0  2019     10   20                  0.0
1  2019     10   19                  2.0
2  2019     10   18                  3.0
3  2019     10   17                  0.0
4  2019     10   16                  5.0
5  2019     10   15                  0.0

答案 1 :(得分:1)

想法是由to_datetimeDataFrame.set_index创建的DatetimeIndex,因此可以在Series.reindex创建的所有日期时间使用date_range,然后从{{1 }},按DataFrame.sort_index排序,最后用DatetimeIndexDataFrame.reset_index删除:

drop=True