前提・実現したいこと
以下のような時系列のデータ(X)があった際に、先頭フラグ(Y)を基準として、そこから何サンプル毎、というような取り出し方をして新しいデータテーブルを作る際に、一発で変換する方法はありますでしょうか。SQL, pandas問いません。現在、for文を用いてstackをしていますが、処理が遅く困っています。
対象のデータ
X = 256, 250, 240, 230, 240, 244, 250, 260, 255, 264
Y = 1, 0, 0, 0, 1, 0, 0, 1, 0, 0
Y = 1の位置から3つ毎のデータを取得してテーブルにする
実現したい変換先データ
X = 256, 250, 240, 240, 244, 250, 260, 255, 264
L = 1, 1, 1, 2, 2, 2, 3, 3, 3
※Lは新データの番号
###現在のstack思考のコード
python
1import pandas as pd 2 3X = [256, 250, 240, 230, 240, 244, 250, 260, 255, 264] 4Y = [ 1, 0, 0, 0, 1, 0, 0, 1, 0, 0] 5 6data = pd.DataFrame() 7data["X"] = X 8data["Y"] = Y 9 10print(data) 11 12newX = [] 13newL = [] 14for label, index in enumerate(data[data["Y"]==1].index): 15 newX.extend(data["X"][index:index+3].values) 16 for i in range(3): 17 newL.append(label) 18 19newData = pd.DataFrame() 20newData["X"] = newX 21newData["L"] = newL 22print(newData) 23
補足情報(FW/ツールのバージョンなど)
回答3件
あなたの回答
tips
プレビュー