2017-03-04 65 views
1

我使用Python 2.7和熊貓0.19.2滾動DatetimeIndex前進到下一個營業一個月的大熊貓

我有一個數據幀如下:

   Frequency  Percentage 
Date    0.033464  0.138084 
2016-10-27  0.174455  0.114329   
2016-11-28  0.116002  0.106543   
2016-12-23  0.113620  0.105842   
2017-01-31  0.115948  0.119684  

我想移動在DatetimeIndex着下一個月的第一個工作日:

   Frequency  Percentage 
Date    0.033464  0.138084 
2016-11-01  0.174455  0.114329   
2016-12-01  0.116002  0.106543   
2017-01-02  0.113620  0.105842   
2017-02-01  0.115948  0.119684 

我不能只加天固定數量的,因爲每個值的日期變化相對於月末。另外,本月的第一天可能是週末,我想要第一個工作日。

我嘗試了一下pandas.timeseries.offsets嘗試使用BMonthBegin(),但無法使其工作,因爲此模塊似乎喜歡時間戳而不是DatetimeIndexes。

誰能幫助?

在此先感謝。日期時間對象我還沒那麼強大。

回答

2

您可以像試圖那樣添加到索引pd.offsets.BMonthBegin()。請注意,此偏移量沒有矢量化實現,所以據我所知可能會比其他一些偏移量(如Day)慢得多,從而引起PerformanceWarning

演示

>>> df.index += pd.offsets.BMonthBegin(1) 
PerformanceWarning: Non-vectorized DateOffset being applied to Series or DatetimeIndex 
    "or DatetimeIndex", PerformanceWarning) 

>>> df 

      Frequency Percentage 
2016-11-01 0.174455 0.114329 
2016-12-01 0.116002 0.106543 
2017-01-02 0.113620 0.105842 
2017-02-01 0.115948 0.119684 
+0

感謝。這似乎很好。我在帖子中沒有包含的一個問題似乎是導致了這個難題,那就是我在嘗試抵消之前重新抽樣了日期。偏移似乎不適用於重新採樣的日期時間索引。 – Windstorm1981

+0

@ Windstorm1981是的,如果你沒有在resample上做'interpolate()'或'mean()',並將它留作'DatetimeIndexResampler',你將無法添加它 - 它會被延遲評估直到聚合的時刻。 – miradulo