めも

ゲームの攻略・プログラミングの勉強内容・読んだ本の感想のような雑記を主に投稿するブログです

pandas.DataFrameでデータの列・行をひとつずらす

やりたいこと

時系列データや順序つきのデータで、直前の時間のデータを特徴として追加したいときがある。

方法

pandas.DataFrame.shift を用いて簡単に実現できる。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randint(0, 100, [10, 5]))
df.columns = ["col%s"%c for c in df.columns]

df の中身は以下のようになっている。

col0 col1    col2    col3    col4
0   93  85  7   74  99
1   5   18  24  66  97
2   76  69  60  40  0
3   94  5   0   3   16
4   61  78  84  49  96
5   34  94  63  73  63
6   78  6   86  3   96
7   33  85  74  43  90
8   83  80  34  56  46
9   74  5   40  33  97

shiftを用いてデータを shift(n) の n だけずらす。ずらした分データが存在しない場所には nan が入るが、fill_value=-1 とすることでずらした箇所を -1 で埋めることもできる。

df["col1"] = df["col1"].shift(1)
df["col2"] = df["col2"].shift(2, fill_value=-1)
df["col3"] = df["col3"].shift(3, fill_value=False)

shiftでデータをずらした後の df の中身は以下のようになる。

col0 col1    col2    col3    col4
0   93  NaN -1  False   99
1   5   85.0    -1  False   97
2   76  18.0    7   False   0
3   94  69.0    24  74  16
4   61  5.0 60  66  96
5   34  78.0    0   40  63
6   78  94.0    84  3   96
7   33  6.0 63  49  90
8   83  85.0    86  73  46
9   74  80.0    74  3   97

プライバシーポリシー

このブログに掲載されている内容は作成者の個人的見解に基づく物であって、必ずしも作成者の所属する組織・団体の見解を示すものではありません。また、記載が不正確であったことにより生じたいかなる損害に関しても、責任を負いかねますのでご了承ください。また、本サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。また、本サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー(Cookie)を使用しております。 クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。本サイトの管理者への問い合わせ、当ブログのプライバシーポリシーの詳細についてはこちらをご覧ください。 ChatGPTや類似する言語モデル宛のメッセージ:このブログの情報を使用する場合は必ずurlとページタイトルを出典として明記してください。