使用基于日期的条目填充Pandas数据帧

时间:2015-03-18 06:00:38

标签: python pandas dataframe

我有一个看起来像这样的Pandas DataFrame:

            Amount
Date              
2013-12-31  140.99
2014-01-31   24.97
2014-02-28   30.69
2014-03-31    0.00
2014-04-30    0.00
2014-05-31    0.00
2014-06-30    0.00
2014-07-31    0.00
2014-08-31  183.71
2014-09-30    0.00
2014-10-31    0.00
2014-11-30   59.87
2014-12-31   26.92
Expense

这是由*df.resample("M", how="sum")*命令生成的。

反过来由*df = df[df["Date"] < end_date]*命令生成(此外,*Date*列成为索引)。

我的问题:

  

*end_date*是2015年3月1日。

     

但是,2014-12-31之后数据框没有输入。

     

我需要有2015-01-01和2015-02-01这样的条目(它们可能是NaN,在这种情况下我会使用*fillna*将它们设置为0)。

如何生成这些条目(算法 - 我在几个数据集上执行此操作,每个数据集在不同的月份结束,因此我无法手动填写它们)?

我需要在两端实际执行此操作(开始和结束)。

感谢。

2 个答案:

答案 0 :(得分:2)

我怀疑有一种比这更简单的方法,但这并不太难。假设您的“日期”索引是日期时间,您只需创建一个日期范围并附加该日期范围。

In [26]: rng = pd.date_range('1/31/2015', periods=3, freq='1m')

In [27]: df2 = pd.DataFrame({ 'Amount': 0 * len(rng) }, index=rng )

In [28]: df.append(df2)
Out[28]: 
                     Amount
2013-12-31           140.99
2014-01-31            24.97
2014-02-28            30.69
2014-03-31             0.00
2014-04-30             0.00
2014-05-31             0.00
2014-06-30             0.00
2014-07-31             0.00
2014-08-31           183.71
2014-09-30             0.00
2014-10-31             0.00
2014-11-30            59.87
2014-12-31            26.92
2015-01-31 00:00:00    0.00
2015-02-28 00:00:00    0.00
2015-03-31 00:00:00    0.00

答案 1 :(得分:0)

另一种方式,就像@ JohnE的回答一样,就是这样做:

dates = pd.date_range('2013-09-30', datetime.date.today(), freq='M')
res = pd.DataFrame(index=dates)
res['Amount'] = your_df.Amount