满足特定条件的 Pandas Dataframe 前向填充
Posted
技术标签:
【中文标题】满足特定条件的 Pandas Dataframe 前向填充【英文标题】:Pandas Dataframe forward fill upto certain condition is met 【发布时间】:2020-01-16 17:43:12 【问题描述】:我有一个从以下代码生成的这样的数据框: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 | - |
我想向前填充“值”列,直到“结束”列 == 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。对不起,我的声誉不够高,无法直接发布图片...
【问题讨论】:
【参考方案1】:首先,始终避免在列中包含混合类型。显然您有字符串和布尔值 - 不建议这样做。
首先,让你的数据框可用:
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
【讨论】:
我知道我在这里评论的是一个旧答案,但这对我一直试图解决的问题非常有帮助。谢谢。以上是关于满足特定条件的 Pandas Dataframe 前向填充的主要内容,如果未能解决你的问题,请参考以下文章
pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe )
pandas使用query函数基于组合判断条件删除dataframe中的不满足条件的数据行(removing rows based on multiple dataframe column value
pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe )
pandas使用或关系(or)构成组合逻辑筛选dataframe中的满足条件的数据行(use or clause to select dataframe rows)