2016-03-08 60 views
1
自定義時間段

我已經得到了以下數據框熊貓:與GROUPBY

import datetime as dt 
import pandas as pd 
import numpy as np 

offset = 3 * pd.tseries.offsets.BMonthEnd() 

bond_index_1 = pd.date_range('1/1/14', '1/1/18', freq=offset, name='date') 
bond_1 = pd.DataFrame(data = np.random.uniform(0, 5, 16), index=bond_index_1, columns=['cash_flow']) 

bond_index_2 = pd.date_range('3/1/14', '3/1/21', freq=offset, name='date') 
bond_2 = pd.DataFrame(data = 2*np.random.uniform(0, 10, 28),  index=bond_index_2, columns=['cash_flow']) 

df_merged = pd.concat([bond_1, bond_2], keys=['Bond_1', 'Bond_2']) 

我如何可以用自定義的範圍獲得在cash_flow列中的值的總和:

始於2014- 6月30日,以2016-12-31結束,間隔6個月。

因此,間隔將如下所示:

2014-06-30

2015年12月31日

2015年6月30日

2015年12月31日

2016年6月30日

2016年12月31日

它也會忽略MultiIndex中的'bond'名稱索引。

我試過使用TimeGrouper,但由於TimeGrouper從您的時間序列中最早的值開始並向前移動,所以無法使用它。

任何想法?

回答

2

resample似乎是解決您的問題的簡單方法之一。

print df_merged.reset_index().set_index('date').resample('6M', how='sum', closed='left', loffset='-1M') 

產量,

  cash_flow 
date     
2014-06-30 16.058478 
2014-12-31 24.282106 
2015-06-30 32.777176 
2015-12-31 33.661801 
2016-06-30 26.779571 
2016-12-31 17.435089 
2017-06-30 30.914194 
2017-12-31 20.117823 
2018-06-30 29.505178 
2018-12-31 17.245787 
2019-06-30 22.975058 
2019-12-31 17.742220 
2020-06-30 11.646266 
2020-12-31 20.077632 
+0

這是偉大的。感謝您的迴應。我錯過了可以將偏移應用於resample的事實。 – Kukai