ローリング時間加重移動平均、私は(それはそれの一部だし、実際のデータフレームを超える70K行で)顧客の販売履歴の次のデータフレームを持っている:パンダ:GROUPBY
import pandas as pd
import datetime as DT
df_test = pd.DataFrame({
'Cus_ID': ["T313","T348","T313","T348","T313","T348","T329","T329","T348","T313","T329","T348"],
'Value': [3,2,3,4,5,3,7.25,10.25,4.5,11.75,6.25,6],
'Date' : [
DT.datetime(2015,10,18),
DT.datetime(2015,11,14),
DT.datetime(2015,11,18),
DT.datetime(2015,12,13),
DT.datetime(2015,12,19),
DT.datetime(2016,1,24),
DT.datetime(2016,1,31),
DT.datetime(2016,2,17),
DT.datetime(2016,3,28),
DT.datetime(2016,3,31),
DT.datetime(2016,4,3),
DT.datetime(2016,4,16),
]})
私はしたいと思いますデータフレームに新しい列を追加して、その顧客の過去90日間の時間加重平均の結果を表示します。
期待される結果(列Value_Result
):
Cus_ID Date Value Value_Result
0 T313 2015-10-18 3.00 NaN (No 90days history)
1 T348 2015-11-14 2.00 NaN (No 90days history)
2 T313 2015-11-18 3.00 3 (3*31)/31
3 T348 2015-12-13 4.00 2 (2*29)/29
4 T313 2015-12-19 5.00 3 (3*62+3*31)/(62+31)
5 T348 2016-01-24 3.00 2.743 (4*42+2*71)/(42+71)
6 T329 2016-01-31 7.25 NaN (No 90days history)
7 T329 2016-02-17 10.25 7.25 (7.25*17)/17
8 T348 2016-03-28 4.50 3 (3*64)/64
9 T313 2016-03-31 11.75 NaN (No 90days history)
10 T329 2016-04-03 6.25 8.516 (10.25*46+7.25*63)/(46+63)
11 T348 2016-04-16 6.00 3.279 (4.5*19+3*83)/(19+83)
私はgroupby('Cus_ID')
を使用しようとした圧延が適用されますが、私は難しさだけ後方に90日間検討する関数を作成しています。
すべての入力が高く評価されています。
[この質問](http://stackoverflow.com/q/15771472/5276797)に似ています。 1つの選択肢は、毎日再サンプリングすることです(これが受け入れられる回答です)。リサンプリングがオプションでない場合、別の回答が適用するアドホック機能を提供します。 – IanS