2013-09-21 73 views
3

作爲排序的後續問題,以能夠在兩個日期時間之間計數活動,ansered很好的位置:Create a Pandas dataframe with counts of items spanning a date range熊貓,簡單1個月添加到datetime列的數據幀

剩下的問題是,最後一個月,['END_DATE']最終在兩個表格相加和相減後顯示爲零,這在數學上是正確的,因爲所有項目在當前月份或更早時間都有結束日期,但是在這種情況下,因爲它們已經在每月至少對於某些部分,這將是更正確的一個月添加到END_DATE所以他們會表現出在結束的月份爲活動(H2是一個數據幀)

的代碼是:

ends = H2['END_DATE'].apply(lambda t: t.to_period(freq='m')).value_counts() 

我試圖使用前滾和DateOffset(月= 1)例如。對於DateOffset:

ends = (H2['END_DATE'].DateOffset(months=1)).apply(lambda t: t.to_period(freq='m')).value_counts() 

這給了我這個錯誤:

AttributeError: 'Series' object has no attribute 'DateOffset' 
+0

你試圖通過一個(月)轉移結束? –

+0

是我,這樣結束的月份會比現在這樣的「最後」本月將進行計數和歸零.. – dartdog

回答

4

最簡單的方法是將一個(月)添加到PeriodIndex:

In [21]: ends 
Out[21]: 
2000-05 1 
2000-09 1 
2001-06 1 
Freq: M, dtype: int64 

In [22]: ends.index = ends.index + 1 

In [23]: ends 
Out[23]: 
2000-06 1 
2000-10 1 
2001-07 1 
Freq: M, dtype: int64 

我最初的建議是,做移位你重建索引後(因爲你要做到這一點無論如何):

In [11]: ends 
Out[11]: 
2000-05 1 
2000-09 1 
2001-06 1 
Freq: M, dtype: int64 

In [12]: p = pd.PeriodIndex(freq='m', start='2000-1', periods=19) # Note: needs to be one more than before 

In [13]: sparse_ends = ends.reindex(p) 

In [14]: sparse_ends.shift(1) 
Out[14]: 
2000-01 NaN 
2000-02 NaN 
2000-03 NaN 
2000-04 NaN 
2000-05 NaN 
2000-06  1 
2000-07 NaN 
2000-08 NaN 
2000-09 NaN 
2000-10  1 
2000-11 NaN 
2000-12 NaN 
2001-01 NaN 
2001-02 NaN 
2001-03 NaN 
2001-04 NaN 
2001-05 NaN 
2001-06 NaN 
2001-07  1 
Freq: M, dtype: float64 
+0

謝謝,這可能會工作不結束了一個更大的,但有沒有一個簡單的方法只需在['END_DATE']添加一個月? – dartdog

+0

移位索引看起來像一個更好的修復,仍然想知道是否有一個簡單的日期添加功能,這是我怎麼會在SQL中,它可以適用? – dartdog

+0

我看到了,我喜歡它..我仍然想知道是否有一個簡單的DateAdd類型函數,我可以使用它可能也適用於其他地方如果需要使用? – dartdog