2列の「パンツ」と「ヒット」を日付で索引付けすると、最新の過去の打撃平均(平均数atbatあたりのヒット数)たとえば、過去の打撃平均は、10を超える最小の死傷者数である可能性があります。これは、条件付き数のルックバック期間を持つローリングウィンドウのようなものです。たとえば、次のように指定します。列の合計に基づいてカスタムルックバックの長さを持つパンダローリングウインドウ
date, atbats, hits,
2017-01-01, 5, 2,
2017-01-02, 6, 3,
2017-01-03, 1, 1,
2017-01-04, 12, 3,
2017-01-04, 1, 0,
最初の日には、過去の未亡人がありませんでした。 2日目はわずか6です。両方とも10未満であるため、NaNでも0でもかまいません。
3日目では、過去2日間を振り返り、5 + 6の平均値(2 + 3)/(5 + 6)= 0.45ヒット/ atbat。
3日目は、過去3日間を振り返り、(2 + 3 + 1)/(5 + 6 + 1)= 0.5ヒット/ atbatを取得します。
4日目は、最後の日を振り返り、4/16 = 0.25ヒット/ atbatを取得します。最終日は10(16)を超えているので、これ以上見る必要はありません。
最終データフレームは次のようになります。
date, atbats, hits, pastAtbats, pastHits, avg,
2017-01-01, 5, 2, 0, 0, 0,
2017-01-02, 6, 3, 0, 0, 0,
2017-01-03, 1, 1, 11, 5, 0.45,
2017-01-04, 16, 4, 12, 6, 0.50,
2017-01-04, 1, 0, 16, 4, 0.25,
はパンダで可能な計算のこの種のですか?
私が考えることができる唯一の解決策は、純粋なブルートフォースです。各行のatbatsでヒットを分割し、各行をx回複製します。ここでx = atbats、そして10のローリングウィンドウを行います。 「atbats」は1日平均約80であるため、データフレームのサイズと計算するウィンドウの総数が大幅に増加します。
私は、よりパフォーマンスの高いものを望んでいました... iterrowsを使用することは、効果的に手動で行ごとに繰り返すだけです。 – Albeit