Рассчитать открытую ставку (сумма вовлеченности / сумма подталкивания) за последние 3 недели на уровне идентификатора - PullRequest
0 голосов
/ 26 января 2020

Данные:

    Id  Year  Week      Nu   En
0    1  2018    21       1        1
1    1  2018    22       1        0
2    1  2018    34       1        1
3    1  2018    35       1        1
4    1  2018    36       1        0
5    1  2018    42       1        0
6    1  2019     2       1        0
7    1  2019     3       1        1
8    1  2019     5       1        1
9    2  2018    40       1        0
10   2  2018    43       1        1
11   2  2018    44       1        1
12   2  2019     2       1        0
13   2  2019     3       1        1
14   3  2018    50       1        1
15   3  2018    52       1        0
16   3  2019     1       1        1

Желаемый результат

Id уровень открытия, где нам нужно найти на прошлой неделе и вычислить, скажем, коэффициент открытия для id 2, на прошлой неделе - Year 2019 Week 3.

Таким образом, чтобы вычислить открытую ставку

Id Year   Week      Nu   En

2  2018    43       1        1
2  2018    44       1        1
2  2019     2       1        0

Сумма En / Сумма Nu, которая составляет (2/3) * 100 = 66,67%

1 Ответ

0 голосов
/ 26 января 2020

Это поможет: df будет вашим входным фреймом данных.

df=df.astype(int) #in case any of the columns is not numeric - this will be a problem later on

df["r"]=df["Year"].mul(100).add(df["Week"])
df["r"]=df.groupby("Id")["r"].rank(ascending=False)
df2=df.loc[df["r"].isin([2,3,4])] #not sure if you actually need to materialize df2 - that's the data frame you're showing in your desired output

df3=df2.groupby("Id")[["Nudged", "Engaged"]].sum()
df3["res"]=df3["Engaged"].div(df3["Nudged"]) #that's the proper final calculation you're looking for

Вывод:

#df2
    Id  Year  Week  Nudged  Engaged    r
5    1  2018    42       1        0  4.0
6    1  2019     2       1        0  3.0
7    1  2019     3       1        1  2.0
10   2  2018    43       1        1  4.0
11   2  2018    44       1        1  3.0
12   2  2019     2       1        0  2.0
14   3  2018    50       1        1  3.0
15   3  2018    52       1        0  2.0
#df3
    Nudged  Engaged       res
Id
1        3        1  0.333333
2        3        2  0.666667
3        2        1  0.500000
...