DataFrame
以下のような日次データを保存しています。
Date Open High Low Close Volume
2010-01-04 38.660000 39.299999 38.509998 39.279999 1293400
2010-01-05 39.389999 39.520000 39.029999 39.430000 1261400
2010-01-06 39.549999 40.700001 39.020000 40.250000 1879800
2010-01-07 40.090000 40.349998 39.910000 40.090000 836400
2010-01-08 40.139999 40.310001 39.720001 40.290001 654600
2010-01-11 40.209999 40.520000 40.040001 40.290001 963600
2010-01-12 40.160000 40.340000 39.279999 39.980000 1012800
2010-01-13 39.930000 40.669998 39.709999 40.560001 1773400
2010-01-14 40.490002 40.970001 40.189999 40.520000 1240600
2010-01-15 40.570000 40.939999 40.099998 40.450001 1244200
私がやろうとしているのは、それを週単位のデータに統合することです。グループ化後:
- の日付毎週月曜日にする必要があります (この時点で、月曜日が取引日でない場合は休日のシナリオを考慮する必要があり、現在の週の最初の取引日を日付として適用する必要があります)。
- 開ける月曜日(または今週の最初の取引日)の始値である必要があります。
- 近い金曜日(または今週の最終取引日)の終値になります。
- 高い今週の取引日の中で最高値となるはずです。
- 低い今週の取引日の中で最も低い安値となるはずです。
- ボリューム現在の週の取引日の全取引量の合計になります。
次のようになります:
Date Open High Low Close Volume
2010-01-04 38.660000 40.700001 38.509998 40.290001 5925600
2010-01-11 40.209999 40.970001 39.279999 40.450001 6234600
現在、私のコード スニペットは以下のとおりですが、日次ベースのデータを予想される週次ベースのデータにマッピングするにはどの関数を使用すればよいでしょうか? よろしくお願いします。
import pandas_datareader.data as web
start = datetime.datetime(2010, 1, 1)
end = datetime.datetime(2016, 12, 31)
f = web.DataReader("MNST", "yahoo", start, end, session=session)
print f
ベストアンサー1
次のようresample
に (週単位)、offset
(シフト)、および集計ルールを設定できます。apply
logic = {'Open' : 'first',
'High' : 'max',
'Low' : 'min',
'Close' : 'last',
'Volume': 'sum'}
offset = pd.offsets.timedelta(days=-6)
f = pd.read_clipboard(parse_dates=['Date'], index_col=['Date'])
f.resample('W', loffset=offset).apply(logic)
取得するため:
Open High Low Close Volume
Date
2010-01-04 38.660000 40.700001 38.509998 40.290001 5925600
2010-01-11 40.209999 40.970001 39.279999 40.450001 6234600