【问题标题】:Fill empty slot with value by checking the line before通过检查之前的行来用值填充空槽
【发布时间】:2016-08-03 10:10:54
【问题描述】:

我有一个这样的数据框:

day  value  
1 HSE  
2 HSE   
3  
4  
5  
6 LSE  
7 LSE  
8  
9  
10  

现在,我想通过检查之前的值来用值填充空槽。所以,我想将 3,4,5 设置为“fromHSE”,将 8,9,10 设置为“fromLSE”。

我试过这样:

e = "HSE"

for line in df:
    if df['value'] == "":
        if e == "HSE":
            df['value'] = "fromHSE"
        elif e == "LSE":
            df['value'] = "fromLSE"
    elif df['value'] == "HSE":
        e = "HSE"
    elif df['value'] == "LSE":
        e = "LSE"

然后我得到错误:

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

我希望你能帮助我。

【问题讨论】:

    标签: string python-3.x pandas dataframe empty-list


    【解决方案1】:

    您可以先将replace 空字符串转换为NaN,使用isnull 创建掩码并使用ffill 创建新的Series。最后添加字符串frommask

    df.value.replace('',np.NaN, inplace=True)
    mask = df.value.isnull()
    new = df.value.ffill()
    print (new.mask(mask, 'from' + new))
    0        HSE
    1        HSE
    2    fromHSE
    3    fromHSE
    4    fromHSE
    5        LSE
    6        LSE
    7    fromLSE
    8    fromLSE
    9    fromLSE
    Name: value, dtype: object
    

    【讨论】:

    • 我应该先屏蔽 +1
    • 但是我得到了另一个看起来有点不同的数据框,所以这个方法不起作用。
    • 你能描述更多a bit different是什么意思吗?没有空字符串?
    • 所以它几乎是相同的,但只有这样的值:day value 1 28.3 2 27.9 3 22.4 4 18.1 5 15.5 6 7.1 7 5.1 8 12.0 9 15.1 10 10.1 现在 HSE 应该超过 25 并且LSE 低于 8。其他一切都是“中”,但我想知道,在它进入“中”之前它是否超过 25 或低于 8。
    • 哦,对不起,风格不知道为什么会这样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2020-02-18
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多