我有一个看起来像这样的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)。
如何生成这些条目(算法 - 我在几个数据集上执行此操作,每个数据集在不同的月份结束,因此我无法手动填写它们)?
我需要在两端实际执行此操作(开始和结束)。
感谢。
答案 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)
dates = pd.date_range('2013-09-30', datetime.date.today(), freq='M')
res = pd.DataFrame(index=dates)
res['Amount'] = your_df.Amount