シリーズの「キャリーオーバー」を計算します。これにより、各行の値が計算され、以前の計算された値(前の行の値)に加算されます。パンダは、以前の値の出力を使用して関数を順番に適用します。
パンダでどうすればいいですか?
あなたは[i]とvalの[I-1] valを持つデータフレームを作成し、単一の軸(この場合は1)を越え、あなたの関数を適用するpd.Series.shift()
を利用することができます
decay = 0.5
test = pd.DataFrame(np.random.randint(1,10,12),columns = ['val'])
test
val
0 4
1 5
2 7
3 9
4 1
5 1
6 8
7 7
8 3
9 9
10 7
11 2
decayed = []
for i, v in test.iterrows():
if i ==0:
decayed.append(v.val)
continue
d = decayed[i-1] + v.val*decay
decayed.append(d)
test['loop_decay'] = decayed
test.head()
val loop_decay
0 4 4.0
1 5 6.5
2 7 10.0
3 9 14.5
4 1 15.0
が最終的にテストに持ちこたえて、これはうまく動作します。パンダは、関数を累積的に適用できるように、 'rolling()'と同様の 'cumulative()'サブクラスを使うことができます。 – RSHAP