date_range()
NumPy と dateutil と何日も格闘した後、最近、素晴らしい Pandas ライブラリを発見しました。ドキュメントとソース コードを精査しましたが、適切なブレークポイントでインデックスを生成する方法がわかりません。
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.rrule で可能です。
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
Pandas はもともと財務分析ツールとして開発されたので、これを行うにはシンプルで高速な方法があるはずです。ご協力いただければ幸いです。
ベストアンサー1
freq='M'
月末の頻度(ここ.shift
) 。ただし、任意の日数 (または任意の頻度) でシフトするには、 を使用できます。
pd.date_range(start, end, freq='M').shift(15, freq=pd.datetools.day)