MathJax

2021年5月23日日曜日

各月の株式最終取引日を求める

とある分析で、各月の株式最終取引日を求めなければならなくなりました。

株式が取引されていた日は、

1980-01-04
1980-01-05
1980-01-07
1980-01-08
1980-01-09
1980-01-10
1980-01-11

のようにテキスト形式で保存されている(取引日は昇順にソート済み)ものを持っています。このとき、各月の最後の取引日を求めるには以下のPythonコードを実行すれば大丈夫。

さすがにこの程度のことは忘れないと思うんだけど、念のためメモ。

In [1]:
import pandas as pd
In [2]:
# テキストファイルの読み込み
df = pd.read_csv('日本株式市場取引日198001-201912.csv', header=None, parse_dates=[0])
In [3]:
# 変数名を付与
df.columns = ['取引日']
In [4]:
df
Out[4]:
取引日
0 1980-01-04
1 1980-01-05
2 1980-01-07
3 1980-01-08
4 1980-01-09
... ...
10154 2019-12-24
10155 2019-12-25
10156 2019-12-26
10157 2019-12-27
10158 2019-12-30

10159 rows × 1 columns

In [5]:
# 取引日の年と月をそれぞれ求める
df['年'] =df['取引日'].dt.year
df['月'] =df['取引日'].dt.month
In [6]:
df
Out[6]:
取引日
0 1980-01-04 1980 1
1 1980-01-05 1980 1
2 1980-01-07 1980 1
3 1980-01-08 1980 1
4 1980-01-09 1980 1
... ... ... ...
10154 2019-12-24 2019 12
10155 2019-12-25 2019 12
10156 2019-12-26 2019 12
10157 2019-12-27 2019 12
10158 2019-12-30 2019 12

10159 rows × 3 columns

In [7]:
# groupby で 各年月の最後のレコードを取り出す
df.groupby(['年','月']).last()
Out[7]:
取引日
1980 1 1980-01-31
2 1980-02-29
3 1980-03-31
4 1980-04-30
5 1980-05-31
... ... ...
2019 8 2019-08-30
9 2019-09-30
10 2019-10-31
11 2019-11-29
12 2019-12-30

480 rows × 1 columns