我有客戶銷售歷史的以下數據框(這只是其中的一部分,實際的數據幀超過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)。一種選擇是每天重新採樣(這是公認的答案)。如果重採樣不是一個選項,另一個答案提供了一個特殊的功能來應用。 – IanS