Python 在ID级别计算过去3周的未平仓利率(参与金额/推动金额)

Python 在ID级别计算过去3周的未平仓利率(参与金额/推动金额),python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,数据: Id年份周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

数据:

Id年份周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
level未平仓率,我们需要找到上周的未平仓率并计算未平仓率 比如说
id
2上周是
2019年
3周

所以要计算未平仓利率

Id年份周Nu En
2  2018    43       1        1
2  2018    44       1        1
2  2019     2       1        0

En之和/Nu之和为(2/3)*100=66.67%

这将实现技巧-
df
作为您的输入数据帧

df=df.astype(int)#如果任何列不是数字,这将是以后的问题
df[“r”]=df[“年”].mul(100)。添加(df[“周”])
df[“r”]=df.groupby(“Id”)[“r”].rank(升序=False)
df2=df.loc[df[“r”].isin([2,3,4])#不确定是否确实需要具体化df2-这是您在所需输出中显示的数据帧
df3=df2.groupby(“Id”)[[“轻推”、“参与”]].sum()
df3[“res”]=df3[“Engaged”].div(df3[“Nudged”])#这是您要寻找的正确的最终计算
输出:

#df2
Id年-周-轻推订婚者
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
轻推已接通的res
身份证件
1        3        1  0.333333
2        3        2  0.666667
3        2        1  0.500000

请不要发布图片。最好的办法是,如果你只是回滚上一次编辑,我确实格式化了它,所以更好地让人们理解。好的,现在你能更具体地解释一下逻辑吗?我不太清楚您是如何获得所需输出的?例如:对于表中的Id 2,我们应该获得该Id的最新一周数据,然后从那里我们必须计算过去3周的数据,排除最新一周的数据,并获得以下结果,如我在描述中已经提到的。这清楚吗?或者必须在itYup中添加一些更具体的数据,修正如下。让我知道,如果这是你想要的,谢谢@格泽戈兹成功了