如何根据条件填充列



我有以下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上有SL,groupbytransform的行,赋值给列,最后与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

最新更新