满足特定条件的 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?

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)

如何使用多个布尔条件选择 Pandas DataFrame 中的特定列