Pandasの日付範囲 質問する

Pandasの日付範囲 質問する

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)

おすすめ記事