为了账号安全,请及时绑定邮箱和手机立即绑定

计算结转效应

计算结转效应

陪伴而非守候 2022-01-18 15:34:21
我想计算电视广告 GRP 数据的结转效应。我的输入数据如下所示:      Variable       Date  Causal  Half_Life0     TV Model 2016-01-10       0          41     TV Model 2016-01-17       0          42     TV Model 2016-01-24       0          43     TV Model 2016-01-31     100          44     TV Model 2016-02-07     110          45     TV Model 2016-02-14      89          46     TV Model 2016-02-21      57          47     TV Model 2016-02-28      90          48   TV General 2016-01-10       0          49   TV General 2016-01-17       0          410  TV General 2016-01-24       0          411  TV General 2016-01-31      30          412  TV General 2016-02-07      32          413  TV General 2016-02-14      42          414  TV General 2016-02-21      39          415  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 pdimport numpy as npimport numpy.random as randomimport statsmodels.api as smimport statsmodels.tsa as tsaimport statsmodels.formula.api as smfimport datetimedf = pd.read_excel('RC Data.xlsx')df['Adstock'] = 0df['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  Adstock0     TV Model 2016-01-10       0          4      0.01     TV Model 2016-01-17       0          4      0.02     TV Model 2016-01-24       0          4      0.03     TV Model 2016-01-31     100          4    100.04     TV Model 2016-02-07     110          4    110.05     TV Model 2016-02-14      89          4     89.06     TV Model 2016-02-21      57          4     57.07     TV Model 2016-02-28      90          4     90.08   TV General 2016-01-10       0          4      0.09   TV General 2016-01-17       0          4      0.010  TV General 2016-01-24       0          4      0.0
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

这是我的解决方案,我认为很难将其矢量化


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']=l

df

Out[982]: 

     Variable        Date  Causal  Half_Life         New

0     TVModel  2016-01-10       0          4    0.000000

1     TVModel  2016-01-17       0          4    0.000000

2     TVModel  2016-01-24       0          4    0.000000

3     TVModel  2016-01-31     100          4  100.000000

4     TVModel  2016-02-07     110          4  194.089642

5     TVModel  2016-02-14      89          4  252.209284

6     TVModel  2016-02-21      57          4  269.081883

7     TVModel  2016-02-28      90          4  316.269991

8   TVGeneral  2016-01-10       0          4    0.000000

9   TVGeneral  2016-01-17       0          4    0.000000

10  TVGeneral  2016-01-24       0          4    0.000000

11  TVGeneral  2016-01-31      30          4   30.000000

12  TVGeneral  2016-02-07      32          4   57.226892

13  TVGeneral  2016-02-14      42          4   90.121889

14  TVGeneral  2016-02-21      39          4  114.783173

15  TVGeneral  2016-02-28      55          4  151.520759


查看完整回答
反对 回复 2022-01-18
  • 1 回答
  • 0 关注
  • 326 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号