私はパンダの専門家ではありません。私は普通のdevの男です。最も効率的な管理値の計算方法
私は管理値を計算したいと思います。 私はdfを1日当たりの市場価格(インデックスを日付として)とdfTrendを同じインデックスの0と1としています。
これらのデータフレームを関数に送り、管理された値を取得すると、トレンドがゼロの場合、管理された値がフラットなままになり、トレンドが1の場合は値を増やし続けます市場価格。例えば
は私のコードは正常に動作しますが、それは非常に遅いです:
def getManagedValue(df, dfTrend):
dfReturn = df.pct_change(1)
dfManaged = df
for col in df:
for i in range(1, len(df[col])):
dfManaged[col][0] = df[col][0]
if dfTrend[col][i] == 1:
dfManaged[col][i] = dfManaged[col][i-1] * (1 + dfReturn[col][i])
else:
dfManaged[col][i] = dfManaged[col][i-1]
return dfManaged
それはより速く実行されるように、私はこれを最適化することができますどのように誰もが知っていますか?すべての列のすべてのセルの反復は、ここでは間違いなく問題です。
誰でも提案を持っている...私はcythonでこれを実行していると思っていますが、私はcython、のみnumpyのの配列でパンダを使用することはできませんよと信じていますか? ジュリアン
ありがとう、それは私が探しているものです。 unfortunetaly、df.shift(1)トレンド== 0なら、私はそれが高原にしたいときにはまだ増加しています。なぜ私は理解できません。 (私はそれをnp.nanとこの仕事に置き換えようとしました) – JulienCoo
申し訳ありませんが、あなたの質問/私の答え、またはdfTrend自体のコードに問題がありますか? – ASGM
df.shift(1)は、dfTrend = 0の間、管理された値を同じ値に保持しません。 – JulienCoo