2016-03-07 61 views
2

我有一個熊貓日期框架是這樣的:減去年大熊貓數據幀,並把它們添加到一個矩陣

 maturity    coupon  freq 
0 2018-06-01 00:00:00   3   1 
1 2017-10-01 00:00:00   2   1 

我想要的是,在第一列包含這些日期和日期1,2的矩陣。在這些日期之前的幾年,第二列包含從2016年3月4日至日期的天數。

像這樣:

date     number of days remaining 
2016-06-01 00:00:00   89 
2016-10-01 00:00:00   211  
2017-06-01 00:00:00   454 
2017-10-01 00:00:00   576 
2018-06-01 00:00:00   819 

請幫幫忙!

回答

1

您可以嘗試通過減去DataOffset列出dfs追加新Series創造新DataFrame,然後concat他們。最後你可以日期時間。減去和dTimedelta通過np.timedeltainteger轉換:

d = "2016.03.04" 

#append substracted column maturity with DateOffset 
dfs =[] 
for i in range(5): 
    years_before = df['maturity'] - pd.DateOffset(years=i) 

    #get only datetime to date d 
    #print years_before.loc[years_before > d] 
    dfs.append(years_before.loc[years_before > d]) 
df = pd.DataFrame(pd.concat(dfs, ignore_index=True)) 
print df 
    maturity 
0 2018-06-01 
1 2017-10-01 
2 2017-06-01 
3 2016-10-01 
4 2016-06-01 
df['remain'] = (df['maturity'] - pd.to_datetime(d))/np.timedelta64(1, 'D') 
#sort values by column maturity 
df = df.sort_values('maturity') 
print df 
    maturity remain 
4 2016-06-01  89 
3 2016-10-01  211 
2 2017-06-01  454 
1 2017-10-01  576 
0 2018-06-01  819 

我估計一下循環的最大數(不深入的檢驗):

#get max count of years => loops 
maxYears = (df['maturity'].max() - pd.to_datetime(d))/np.timedelta64(1, 'D')/(365.25) 
print maxYears 
2.24229979466 

#convert float to int, if 2.999 => 2, so one year is added 
#rather add one more year (leap years, year is only estimated) 
maxYears = int(maxYears) + 2 
print maxYears 
4