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.rruleで可能です:
rrule(freq=MONTHLY, dtstart=start, bymonthday=(start.day, -1), bysetpos=1)
醜いと判読不能ですが、動作します。私はパンダでどうすればいい?私はdate_range()
とperiod_range()
の両方で遊んだことがあります。
groupby
,crosstab
および/またはresample
を使用すると、期間内の個々のエントリの合計/平均/などに基づいて各期間の値が計算されます。言い換えれば、私はからデータを変換したい:パンダは、財務分析ツールとして発信していることを考えると
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
に
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')
、私が行うためのシンプルかつ高速な方法があることはほぼ確実ですこの。ヘルプは高く評価しました!
感謝をしてみてください、これは私がRRULEハックに基づいたソリューションを作成する必要がトリックかもしれません。しかし、これは範囲での再サンプリングには役立たない。なぜなら、resampleは月AFAIKの初めに合わせてビンを使い続けるからだ。 – knite
一定の日数だけシフトする場合は、month start 'MS'を使用する方が意味があります。 'pd.date_range(start、end、freq = 'MS')。shift(15、freq = pd。 datetools.day) ' –