python - 满足特定条件的 Pandas Dataframe 前向填充
问题描述
我有一个从下面的代码生成的这样的数据框:df1
import pandas as pd
import numpy as np
df = pd.DataFrame({'Start': [True, '-', '-', '-', True, '-', '-', '-', True, '-', '-', '-'],
'End': ['-', '-', '-', True, '-', '-', '-', True, '-', '-', '-', True],
'Value': ['-', 15, '-', '-', 109, '-', '-', '-', '-', '-', 13, '-']})
df
| | Start | End | Value |
|-------|-------|-------|-------|
| 0 | True | - | - |
| 1 | - | - | 15 |
| 2 | - | - | - |
| 3 | - | True | - |
| 4 | True | - | 109 |
| 5 | - | - | - |
| 6 | - | - | - |
| 7 | - | True | - |
| 8 | True | - | - |
| 9 | - | - | - |
| 10 | - | - | 13 |
| 11 | - | True | - |
我想向前填充“值”列,直到“结束”列==真这样的点:df2
| | Start | End | Value |
|-------|-------|-------|-------|
| 0 | True | - | - |
| 1 | - | - | 15 |
| 2 | - | - | 15 |
| 3 | - | True | 15 |
| 4 | True | - | 109 |
| 5 | - | - | 109 |
| 6 | - | - | 109 |
| 7 | - | True | 109 |
| 8 | True | - | - |
| 9 | - | - | - |
| 10 | - | - | 13 |
| 11 | - | True | 13 |
任何帮助将不胜感激!
PS。对不起,我的声誉不够高,无法直接发布图像......
解决方案
首先,始终避免在列中包含混合类型。显然你有字符串和布尔值——不推荐。
首先,使您的数据框可行:
df = df.replace('-',np.nan).astype(float)
然后,简单的groupby
+ffill
s = df.start.eq(1).cumsum()
df['value'] = df.groupby(s).value.ffill()
start end value
0 1.0 NaN NaN
1 NaN NaN 15.0
2 NaN NaN 15.0
3 NaN 1.0 15.0
4 1.0 NaN 109.0
5 NaN NaN 109.0
6 NaN NaN 109.0
7 NaN 1.0 109.0
8 1.0 NaN NaN
9 NaN NaN NaN
10 NaN NaN 13.0
11 NaN 1.0 13.0
推荐阅读
- apache-edgent - 如何过滤 Apache Edgent 并显示被过滤的值?
- node.js - 如何将 Dynamo db 与 Express Angular 应用程序连接起来
- python - 我需要分组并在python中获得排名
- javascript - 新行作为空格和终止符
- angular - 为什么 keypress 在 mat-select 中不起作用?
- sql - 删除对 PIVOT 表的子查询
- c++ - c++ float* 数组作为对 std::vector 的引用
- javascript - 即使我没有在对等候选人中添加冰候选人,Webrtc 呼叫也会连接
- gitlab - 如何正确使用部署令牌
- r - 通过矢量索引访问 data.table 列?