#実現したい事
dsというデータフレームのFxという列にあるデータについて、以下のように処理を行っています。
現在はds['Fx'][0:29]について計算をするとtupleで1値が与えられ、その値をds['psd_px'][0:29]に30個連続で同じ値が代入されるという形になっています。
python
1#psd検出 2f,psd=signal.welch(ds['Fx'][0:30]) 3#ピーク検出 4maxid = signal.argrelmax(psd, order=30) 5ds['psd_px']=np.nan 6ds.loc[0:30,'psd_px']=maxid 7print(ds) 8
上記を、[0:29]の処理が終わった後、続けて[30:59]の計算をして[30:59]に同じ値が代入される、のように30個ずつ続けて最後の行まで繰り返すような実装を行いたいと考えています。
このような繰り返し実装を行う方法を教えて頂きたいです。
ご指導よろしくお願いいたします。
#現状
皆さんのアドバイスを参考に以下のように組みなおした所、for文を使って繰り返し値を代入することが出来ました。
python
1nums = [0,1,2,3] 2xlist = [] 3ylist = [] 4for i in nums: 5 f,psd=signal.welch(ds['Fx'][i*30:(i+1)*30-1]) 6 maxid = signal.argrelmax(psd, order=30) 7 xlist.extend(f[maxid]) 8 ylist.extend(psd[maxid]) 9ds['PSDx_fx'] = pd.DataFrame(xlist) 10ds['PSDy_fx'] = pd.DataFrame(ylist)
#質問
結果を出すために上記のコード上ではnumsというリストを作り、i==3となるまで繰り返しが行われるようになっているのですが、これをリストを使わず、ds['Fx']の列の末尾に来た段階で終了する、というように書き換えるにはどうすればよいでしょうか?
(このコードを将来的にいくつかのファイルに適応させたい、ファイルによって行数が異なるため一つの値に定められない)
あなたの回答
tips
プレビュー