1. この記事は
複数銘柄の日足データを銘柄ごとに週足データに算出するコードを掲載する。
2. コードの説明
pd.Grouperを使うのがポイントです。Multiindexの場合、groupbyを使用するとresampleのコードでエラーが発生します。よって、pd.Grouperを使用します。
sample.py
import pandas as pd
import numpy as np
dat=[
[1570,"2021/7/5",15650,15670,15490,15520,3315590],
[1570,"2021/7/6",15620,15690,15500,15560,3165551],
[1570,"2021/7/7",15050,15340,15030,15260,6047534],
[1570,"2021/7/8",15200,15280,14990,15020,4927900],
[1570,"2021/7/9",14620,14880,14240,14850,15201967],
[1570,"2021/7/12",15440,15500,15360,15460,8908945],
[1570,"2021/7/13",15630,15780,15610,15640,6024571],
[1570,"2021/7/14",15410,15610,15370,15510,4788303],
[1570,"2021/7/15",15430,15480,15120,15160,6687459],
[1570,"2021/7/16",14840,15090,14700,14890,8021962],
[1570,"2021/7/19",14500,14650,14320,14470,8402245],
[1570,"2021/7/20",14200,14400,14140,14220,8901150],
[1570,"2021/7/21",14610,14730,14260,14380,7473282],
[1305,"2021/7/5",2073,2076,2066,2074,155700],
[1305,"2021/7/6",2080,2085,2072,2078,188890],
[1305,"2021/7/7",2054,2070,2047,2058,740510],
[1305,"2021/7/8",2020,2024,2007,2007,216620],
[1305,"2021/7/9",1976,2004,1964,1999,403640],
[1305,"2021/7/12",2035,2042,2028,2036,208860],
[1305,"2021/7/13",2049,2060,2048,2051,655740],
[1305,"2021/7/14",2041,2056,2038,2047,83270],
[1305,"2021/7/15",2045,2045,2021,2022,132610],
[1305,"2021/7/16",2014,2027,2008,2016,77810],
[1305,"2021/7/19",1995,2001,1981,1991,162720],
[1305,"2021/7/20",1969,1981,1964,1970,476450],
[1305,"2021/7/21",2000,2009,1983,1985,91520]
]
#datをDataFrame型変数dfに格納する。
df = pd.DataFrame(dat,columns=["Code","Date","Open","High","Low","Close","Volume"])
df['Date'] = pd.to_datetime(df['Date'], format='%Y/%m/%d') #文字列型を日付型に変更する
print("### 銘柄番号1305,1570の日足株価データ")
display(df)
d_ohlcv = {'Open': 'first','High': 'max','Low': 'min','Close': 'last','Volume': 'sum'}
df_stock = df.groupby(['Code', pd.Grouper(freq='W', key='Date')]).agg(d_ohlcv) #株価データ(週足)を取得する。
print("#### 銘柄番号1305,1570の週足株価データ")
display(df_stock)
実行結果