让我们说我有以下熊猫数据框:
+---------------------+---------+-------+-----+
| observed_cats_count | year | month | day |
+---------------------+---------+-------+-----+
| 2 | 2019 | 10 | 19 |
| 3 | 2019 | 10 | 18 |
| 5 | 2019 | 10 | 16 |
+---------------------+---------+-------+-----+
还有两个边界日期,例如2019-10-15
和2019-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 |
+---------------------+---------+-------+-----+
答案 0 :(得分:2)
我将使用pd.date_range
来构建一个新的数据框,然后合并回df
和fillna
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_datetime
和DataFrame.set_index
创建的DatetimeIndex
,因此可以在Series.reindex
创建的所有日期时间使用date_range
,然后从{{1 }},按DataFrame.sort_index
排序,最后用DatetimeIndex
用DataFrame.reset_index
删除:
drop=True