我有以下df:
df = pd.DataFrame({"Value":[1,4,2,1,2,1,2,2],'type':['S','C','L','C','C','S','L','S'],'exit_value':[8,'','','','',2,'','1']})
Value type exit_value
0 1 S 8
1 4 C
2 2 L
3 1 C
4 2 C
5 1 S 2
6 2 L
7 2 S 1
我希望有以下结果:
Value type exit_value
0 1 S 8
1 4 C 8
2 2 L 8
3 1 C
4 2 C
5 1 S 2
6 2 L 2
7 2 S 1
逻辑:在每个类型S中,我都有一个exit_value,该值应该一直填充到第一个L类型。
我试过什么了?我可以得到每种类型S的索引和每种类型L的索引,然后从S迭代到L,并提供索引S中的值,但我觉得这个解决方案有点过头了。
IIUC首先选择first
上有S
和L
,groupby
和transform
的行,赋值给列,最后与where
比较:
s = df[df["type"].isin(["S", "L"])]
df["exit_value"] = s.groupby(s["type"].eq("S").cumsum())["exit_value"].transform("first")
print (df.ffill().where(df.ffill()==df.bfill()))
Value type exit_value
0 1 S 8
1 4 C 8
2 2 L 8
3 1 C NaN
4 2 C NaN
5 1 S 2
6 2 L 2
7 2 S 1