JupyterNoteBookで、Pandas.DataFrameのindexを1つずらす。

JupyterNoteBookで、Pandas.DataFrameのindexを1つずらす。

JupyterNoteBookPythonのライブラリ、PandasDataFrameの列を、indexをずらして複製する方法を紹介します。

まえがき

 時間データを扱うとき、PandasDataFrameindexをずらした列を追加したい場合が結構あります。
なぜなら、indexをずらした列はある時刻における、未来、もしくは過去の値として使用することができるため、機械学習で未来予測を行うときの入力データとして有用だからです。
 しかし、それを作ろうとすると、DataFrameExcelの様にセルを削除できない上に、列を追加すると勝手にindexを合わせてしまうので、工夫が必要になります。本記事では、indexをずらした列を追加する方法を紹介します。
DataFrameの詳しい使い方は以下の公式サイトを確認してください。

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html?highlight=dataframe#pandas.DataFrame

前回までの記事と同じく、今後の例では以下のcsvデータを使用します。
1行目はヘッダーで、2行目~101行目までの100行×5列のデータです。
csvデータを読み込む方法については以下の記事を参照してください。
https://tedukapm.tech/?p=12

環境はPython3.8JupyterNoteBook6.3.0です。

やりかた

 以下の方法で、A列を1行ずつずらして、Shift列を作ることができます。

shift_df = pd.DataFrame({'Shift0':df['A'].iloc[0:-10]})
for i in range(0,10):
    shift_df['Shift'+ str(i)] = df['A'].iloc[i:-(10-i)].values

説明

 上のコードでやっていることを説明します。
 まず、1行目では”Shift_df“というDataFrameを新規作成しています。この時、右辺でShift_dfの中身を作っているのですが、ここでは、”Shift0“という名前の列を作り、その中身を、dfA列の後ろから10行を抜き取ったものにしています。
 次に、2行目~3行目で、”Shifti”という名前の列をShift_dfに追加して行きます。その中身はdfA列の前からi行と後ろから10-i行を抜き取ったものです。ずらすだけなら、前から抜き取るだけでよいのですが、DataFrameの仕様で、全ての列が同じ行数でなければならないので、行数を合わせるために後ろからも抜き取っています。

まとめ

 JupyterNoteBookPythonのライブラリ、PandasDataFrameのカラムを、indexをずらして複製する方法を紹介しました。