python - 如何根据条件填充列
问题描述
我有以下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 中的值,但我觉得这个解决方案有点过头了。
解决方案
IIUC 首先选择带有S
和的行L
,groupby
然后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
推荐阅读
- r - 打印一个循环通过 3 个参数和输出匹配条件的 R 函数
- swiftui - ScrollView 内容的动态高度不起作用
- r - 如何在 R 中存储具有当前日期/Sys.Date() 的文件?
- python - 如何使用 OpenCV 在视频上绘制 matplotlib 图
- mongodb - 执行文件删除操作的最佳位置在哪里?
- amazon-web-services - 将 asp.net 核心 API 部署到 AWS 导致环境不响应错误
- r - 是否可以用 dplyr 计算条件 cumsum
- javascript - 使用 Firebase 绘制 Python Django 的基于时间的图
- java - 然后在抽象类的具体方法中不使用注入模拟时的 Mockito
- javascript - AdaptiveCards 可扩展性