與NumPy和dateutil戰鬥了幾天後,我最近發現了令人驚歎的熊貓圖書館。我一直在閱讀文檔和源代碼,但我無法弄清楚如何讓date_range()
在正確的斷點處生成索引。熊貓人的日期範圍
from datetime import date
import pandas as pd
start = date('2012-01-15')
end = date('2012-09-20')
# 'M' is month-end, instead I need same-day-of-month
date_range(start, end, freq='M')
我想要什麼:
2012-01-15
2012-02-15
2012-03-15
...
2012-09-15
我得到什麼:
2012-01-31
2012-02-29
2012-03-31
...
2012-08-31
我需要一個月大小的塊是佔天在一個月內可變數目。這可能與dateutil.ru:
rrule(freq=MONTHLY, dtstart=start, bymonthday=(start.day, -1), bysetpos=1)
醜陋和難以辨認,但它的工作原理。我怎樣才能用熊貓做到這一點?我已經玩過date_range()
和period_range()
,到目前爲止沒有運氣。
我的實際目標是使用groupby
,crosstab
和/或resample
來計算每個時期的價值,基於該時期內各個條目的總和/平均值等。換句話說,我想從轉換數據:
total
2012-01-10 00:01 50
2012-01-15 01:01 55
2012-03-11 00:01 60
2012-04-28 00:01 80
#Hypothetical usage
dataframe.resample('total', how='sum', freq='M', start='2012-01-09', end='2012-04-15')
到
total
2012-01-09 105 # Values summed
2012-02-09 0 # Missing from dataframe
2012-03-09 60
2012-04-09 0 # Data past end date, not counted
鑑於大熊貓起源於財務分析工具,我幾乎可以肯定,有一個簡單,快捷的方式做這個。幫助讚賞!
謝謝,這可能是我需要創建基於RRULE黑客的解決方案的伎倆。但是,這不會對範圍上的重採樣有所幫助,因爲resample仍然會使用與AFAIK月初對齊的分箱。 – knite
如果您要按照一致的天數移動,則使用月開始'MS'更有意義: 'pd.date_range(start,end,freq ='MS')。shift(15,freq = pd。 datetools.day)' –