Python Pandasでのデータ処理の質問です。
以下のようなDataFrameに対して、
df1
A | B | C |
---|---|---|
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | -1 |
-1 | 0 | 0 |
0 | 1 | 0 |
0 | -1 | 0 |
以下のようなDataFrameを返す処理をさせたいと考えています。
df2
A | B | C |
---|---|---|
0.5 | 0.5 | 0.5 |
0.75 | 0.5 | 0.5 |
0.75 | 0.75 | 0.5 |
0.75 | 0.75 | 0.25 |
0.375 | 0.75 | 0.25 |
0.375 | 0.875 | 0.25 |
df1とdf2ともに行方向に時系列データです。
df1が問題A,B,Cに対しての正解不正解を表しており、df2がA,B,Cに対する習熟度のイメージです。
df2の先頭行は0.5として初期化しています。
処理の内容としては、df1の各行の値(1:正解, -1:不正解, 0.5:未出題)に対して、
df2の次の行のスコアが更新される、というものです。
スコアの更新方法は、正解ならば直前のスコアの0.5倍に0.5を加算し、不正解ならば直前のスコアを0.5倍するだけ、という仕様です。
df2の各値は加重平均で表すことができ、例えば2回正解したときのdf2の値は、
0.75 = 0.5 * 0.5 + 0.5
0.875 = 0.5 * 0.75 + 0.5
= 0.5 * (0.5 * 0.5 + 0.5) + 0.5
= 0.5^2 * 0.5 + 0.5 * 0.5 + 0.5
となります。
単純な加重平均ならば
np.average(df1, weights=hoge)
で算出できると思うのですが、上記のようなケースだとどのように記述すれば高速に処理できるのでしょうか。
回答1件
あなたの回答
tips
プレビュー