【问题标题】:Pandas Dataframe forward fill upto certain condition is met满足特定条件的 Pandas Dataframe 前向填充
【发布时间】: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。对不起,我的声誉不够高,无法直接发布图片...

【问题讨论】:

    标签: python pandas dataframe fillna


    【解决方案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
    

    【讨论】:

    • 我知道我在这里评论的是一个旧答案,但这对我一直试图解决的问题非常有帮助。谢谢。
    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 2017-12-12
    • 2021-01-04
    • 2020-02-02
    • 2021-12-04
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多