par*_*lau 3 python dataframe pandas fillna
我有一个从以下代码生成的数据框: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 | - |
Run Code Online (Sandbox Code Playgroud)
我想向前填充“值”列,直到“结束”列 == 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 |
Run Code Online (Sandbox Code Playgroud)
任何帮助都将受到高度赞赏!
附注。抱歉,我的声誉不够高,无法直接发布图片...
首先,始终避免在列中使用混合类型。显然你有字符串和布尔值 - 不推荐这样做。
首先,使您的数据框可用:
df = df.replace('-',np.nan).astype(float)
Run Code Online (Sandbox Code Playgroud)
然后,简单groupby+ffill
s = df.start.eq(1).cumsum()
df['value'] = df.groupby(s).value.ffill()
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)