猿问

计算结转效应

我想计算电视广告 GRP 数据的结转效应。我的输入数据如下所示:


      Variable       Date  Causal  Half_Life

0     TV Model 2016-01-10       0          4

1     TV Model 2016-01-17       0          4

2     TV Model 2016-01-24       0          4

3     TV Model 2016-01-31     100          4

4     TV Model 2016-02-07     110          4

5     TV Model 2016-02-14      89          4

6     TV Model 2016-02-21      57          4

7     TV Model 2016-02-28      90          4

8   TV General 2016-01-10       0          4

9   TV General 2016-01-17       0          4

10  TV General 2016-01-24       0          4

11  TV General 2016-01-31      30          4

12  TV General 2016-02-07      32          4

13  TV General 2016-02-14      42          4

14  TV General 2016-02-21      39          4

15  TV General 2016-02-28      55          4

我想根据以下条件计算一个新列 df['Adstock']:


如果列 df.Variable 中组的第一行,则 df.Adstock = df.Causal 如果不是组中的第一行,则 df. Adstock = df.Causal + 0.5**(1/df.Half_life)*df.Adstock 来自上一行。


我正在使用以下代码:


import pandas as pd

import numpy as np

import numpy.random as random

import statsmodels.api as sm

import statsmodels.tsa as tsa

import statsmodels.formula.api as smf

import datetime


df = pd.read_excel('RC Data.xlsx')



df['Adstock'] = 0


df['Adstock'] = np.where(df['Variable'] == df['Variable'].shift(1), df['Adstock'].shift(1)*(0.5**(1/df['Half_Life'])) + df['Causal'], df['Causal'])

我得到的输出如下:


      Variable       Date  Causal  Half_Life  Adstock

0     TV Model 2016-01-10       0          4      0.0

1     TV Model 2016-01-17       0          4      0.0

2     TV Model 2016-01-24       0          4      0.0

3     TV Model 2016-01-31     100          4    100.0

4     TV Model 2016-02-07     110          4    110.0

5     TV Model 2016-02-14      89          4     89.0

6     TV Model 2016-02-21      57          4     57.0

7     TV Model 2016-02-28      90          4     90.0

8   TV General 2016-01-10       0          4      0.0

9   TV General 2016-01-17       0          4      0.0

10  TV General 2016-01-24       0          4      0.0


陪伴而非守候
浏览 327回答 1
1回答

墨色风雨

这是我的解决方案,我认为很难将其矢量化l=[]for x , y in df.groupby('Variable',sort=False):    #print(y)    l1=[]    for s,t in y.iterrows():        if len(l1)==0:            l1.append(t['Causal'])        else:            l1.append(t['Causal'] + 0.5**(1/t['Half_Life'])*l1[-1])    l.extend(l1)df['New']=ldfOut[982]:      Variable        Date  Causal  Half_Life         New0     TVModel  2016-01-10       0          4    0.0000001     TVModel  2016-01-17       0          4    0.0000002     TVModel  2016-01-24       0          4    0.0000003     TVModel  2016-01-31     100          4  100.0000004     TVModel  2016-02-07     110          4  194.0896425     TVModel  2016-02-14      89          4  252.2092846     TVModel  2016-02-21      57          4  269.0818837     TVModel  2016-02-28      90          4  316.2699918   TVGeneral  2016-01-10       0          4    0.0000009   TVGeneral  2016-01-17       0          4    0.00000010  TVGeneral  2016-01-24       0          4    0.00000011  TVGeneral  2016-01-31      30          4   30.00000012  TVGeneral  2016-02-07      32          4   57.22689213  TVGeneral  2016-02-14      42          4   90.12188914  TVGeneral  2016-02-21      39          4  114.78317315  TVGeneral  2016-02-28      55          4  151.520759
随时随地看视频慕课网APP

相关分类

Python
我要回答