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中添加一些更具体的数据,修正如下。让我知道,如果这是你想要的,谢谢@格泽戈兹成功了