インストルメンテーション データの行数と列数がすべて同じ .csv ファイルが 300 個まであります。各 .csv ファイルは 1 日を表し、構造は同じであるため、各 .csv を Pandas DataFrame にプルしてから、それらを Panel オブジェクトにスローして計算を高速化するのが最善であると考えました。
できれば for ループを使用せずに、パネル内にある各 DataFrame に追加の計算列を追加したいと思います。パネルに適用機能を使用し、元の列名に「p」を追加して新しい列に名前を付けようとしています (後で簡単にインデックスを作成するため)。以下は、私が現在使用しているコードです。
import pandas as pd
import numpy as np
import os.path
dir = "data/testsetup1/"
filelist = []
def initializeDataFrames():
for f in os.listdir(dir):
if ".csv" in f:
filelist.append(dir + f)
dd={}
for f in filelist:
dd[f[len(dir):(len(f)-4)]] = pd.read_csv(f)
return pd.Panel(dd)
def newCalculation(pointSeries):
#test function, more complex functions to follow
pointSeriesManiuplated = pointSeries.copy()
percentageMove = 1.0/float(len(pointSeriesManiuplated))
return pointSeriesManiuplated * percentageMove
myPanel = initializeDataFrames()
#calculatedPanel = myPanel.join(lambda x: myPanel[x,:,0:17].apply(lambda y:newCalculation(myPanel[x,:,0:17].ix[y])), rsuffix='p')
calculatedPanel = myPanel.ix[:,:,0:17].join(myPanel.ix[:,:,0:17].apply(lambda x: newCalculation(x), axis=2), rsuffix='p')
print calculatedPanel.values
上記のコードは現在、計算された列を各 DataFrame に追加するのではなく、各 DataFrame を複製しています。私が使用している適用関数は、この場合は渡された列になる Series オブジェクトで動作します。 私の質問は、新しい列を計算して各 DataFrame に追加するように、Panel で apply 関数を使用するにはどうすればよいですか?
前もって感謝します。