首页 > 解决方案 > 如何根据条件填充列

问题描述

我有以下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

逻辑:在每种类型的 SI 中都有一个 exit_value,并且该值应该一直填充到第一个 L 类型。

我尝试了什么?我可以获取每种类型 S 的索引和每种类型 L 的索引,并从 S 迭代到 L 并提供我在索引 S 中的值,但我觉得这个解决方案有点过头了。

标签: pythonpandas

解决方案


IIUC 首先选择带有S和的行Lgroupby然后transform在 上first分配给列,最后与 比较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

推荐阅读