不適切に保存されたいくつかの時系列データを変更しています。
ほとんど 15 分ごとのタイム スタンプを持つインデックスを作成した列がありますが、それよりも短いものもあります。行が間隔のどの部分であるかを示す列もstart_sec
あり ます。end_sec
問題は、データ作成者が時間間隔がすべて 15 分の長さであると想定しているためstart_sec
end_sec
、実際の間隔の長さに関係なく、すべての値が 0 から 900 (疑似秒) になることです。これらの列を開始時間 (インデックス) と実際の秒数に結合したいと思います。
物事を再スケーリングするための私の非常に厄介な解決策は、短い間隔のタイムスタンプのリストを生成し、すべてを for ループに入れることでした
for i in short_intervals:
scale = float(df[ (df.index == i) ].delta.max()) / 60. / 15.
df[ (df.index == i) ].start_sec = df[(df.index == i)].start_sec * scale
df[ (df.index == i) ].end_sec = df[(df.index == i)].end_sec * scale
df.index == i
与えられたタイムスタンプに関連する行のセットを選択する場所
df.delta.max()
は、間隔の実際の長さを分単位で持ちます(物事の保存方法のため)
scale
実際の秒数を取得するために疑似秒数をスケーリングしたい値を与えます。
それはすべて正常に機能し、完了したと思いましたが、
df[ (df.index == i) ].start_sec = df[(df.index == i)].start_sec * scale
実際には DataFrame を更新しません。df はループ後も前とまったく同じです。