【问题标题】:Filling time series column values with last known value用最后一个已知值填充时间序列列值
【发布时间】:2020-10-07 20:27:26
【问题描述】:

我有一个像这样的 Pandas 时间序列数据框:

id .. .. ..(some cols) 1/1/20 1/2/20 1/3/20 1/4/20 1/5/20 1/6/20 ....
1                      10     20     0      40     0      50
2                      10     30     30     0      0      50
.
.

我想ffill 具有最后一个已知值的列中的 0 得到类似的结果:

id .. .. ..(some cols) 1/1/20 1/2/20 1/3/20 1/4/20 1/5/20 1/6/20 ....
1                      10     20     20     40     40      50
2                      10     30     30     30     30      50
.
.

假设id 和时间序列列之间还有一些其他列,我如何ffill 这样的数据框?我知道像 df.ffill(axis = 1) 这样的东西适用于 Null 值,但我找不到任何东西来修改它以使用 0

【问题讨论】:

    标签: python python-3.x pandas dataframe imputation


    【解决方案1】:

    你可以用maskupdateffill

    df.update(df.filter(like='/').mask(lambda x : x==0).ffill(1))
    

    【讨论】:

    • 有没有办法为0np.nan 使用这个单一的衬里?这似乎不起作用df.update(df.filter(like='/').mask(lambda x : x==0 or np.nan).ffill(1))
    • @codingtherapy df.filter(like='/').mask(lambda x : (x==0) | x.isnull())
    • 它仍然无法处理空单元格。知道为什么吗?
    • @codingtherapy empty is '' not null
    • df.update(df.filter(like='/').mask(lambda x: (x == float(np.nan) | (x == 0)).ffill(1))) 给我TypeError: Cannot perform 'ror_' with a dtyped [bool] array and scalar of type [float]
    【解决方案2】:

    也许我的解决方案可能有点幼稚,但您可以将您感兴趣的值转换为 nan,然后使用 fillna 方法。就像这样:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(dict(col1=[1,2,3,4,5],col2=[3,0,3,5,0],col3=[0,2,0,0,1]))
    df[df==0]=np.nan
    df.fillna(method='ffill',axis=1)
    

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 2021-04-21
      • 2020-02-13
      • 2019-11-09
      • 1970-01-01
      • 2018-03-19
      相关资源
      最近更新 更多