私は、その中に測定値を持つデータフレームと、それらの測定値に統計値を持つ2番目のデータフレームを持っています。例:他の列の関数であるパンダデータフレームに列を追加する
def calc_zscore(x, mean, stdev):
return (x - mean)/stdev
metrics = ['Temperature', 'Length', 'Width']
values = ['mean', 'stdev']
data = pd.DataFrame(columns = metrics)
stats = pd.DataFrame(index = metrics, columns = values)
stats.ix['Temperature', 'mean'] = 72.1
stats.ix['Temperature', 'stdev'] = 6.3
data.loc[0, 'Temperature'] = 68.2
data.loc[1, 'Temperature'] = 76.2
data.loc[2, 'Temperature'] = 73.6
metric = 'Temperature'
for row in data.index:
data.ix[row, metric + '_zscore'] = calc_zscore(data.ix[row, metric], stats.ix[metric, 'mean'], stats.ix[metric, 'stdev'])
print data
これは私の望むように機能しますが、データフレームのすべての行を繰り返し処理する必要があります。それは遅く、データフレームには300kの行があります。私はまた、各列のz_scoreを計算する必要がありますが、単純なままにするために、この例ではTemperatureカラムだけを行っています。適用()メソッドを使用して
Temperature Length Width Temperature_zscore
0 68.2 NaN NaN -0.619048
1 76.2 NaN NaN 0.650794
2 73.6 NaN NaN 0.238095
は)しかし、私は(適用使っcalc_zscore関数に正しい値を渡す方法がわからないんだけど、魔法の天のパンダへのパスのようです。
PS私は実際にzスコアを計算していないので、これを例として使用しています。私はmean()とstd()メソッドを使うこともできますが、それは単なる例であり、存在しないふりをしましょう。
適用行くための一つの方法ですが、単純なデータ[ 'RESを使用して、次に「データ」のデータフレームに「統計情報」を結ぶ場合、私は疑問に思う:
その後は、部分的な機能があることを適用します'] = data [' x '] - データ[' y ']スタイルの列の作成は、より高速かもしれません。 – Karnage