【问题标题】:How to fill missing values using last available data from past months?如何使用过去几个月的最后可用数据填充缺失值?
【发布时间】:2018-12-07 12:03:04
【问题描述】:

我有一个这样的数据框:

Month/Year  Value   
01/2018     100 
03/2018     200 
06/2018     500 

缺少 02/2018、04/2018 和 05/2018 的值,因为这些月份的值没有变化。我想要一个包含缺失月份的数据框:

Month/Year  Value   
01/2018     100 
02/2018     100 
03/2018     200 
04/2018     200 
04/2018     200 
06/2018     500 

谁能帮忙?

【问题讨论】:

    标签: python pandas datetime dataframe


    【解决方案1】:

    一种方法:

    df.assign(**{"Month/Year": pd.to_datetime(data["Month/Year"])}).set_index("Month/Year").resample("M").ffill().reset_index()
    

    应该让步:

      Month/Year  Value
    0 2018-01-31    100
    1 2018-02-28    100
    2 2018-03-31    200
    3 2018-04-30    200
    4 2018-05-31    200
    5 2018-06-30    500
    

    df 这是您的起始数据框。它将resampled 获取到每月频率,我们使用.ffill 方法来填充缺失月份的值。

    我选择了单行代码,但您可以将其分解为更结构化的代码块。您也可以在重采样后重新格式化Month/Year 列。

    我希望这会有所帮助。

    【讨论】:

    • 问题解决了!谢谢!很高兴知道 .ffill 方法。
    【解决方案2】:

    您可以使用pd.DataFrame.resample,然后使用pd.Series.ffill 来前向填充空值。如果您需要字符串日期,则需要进行额外的转换,如下所示。

    df['date'] = pd.to_datetime(df['Month/Year'])
    
    res = df.resample('M', on='date')\
            .sum().ffill().astype(int)\
            .reset_index()
    
    res['date'] = res['date'].dt.strftime('%m/%Y')
    
    print(res)
    
          date  Value
    0  01/2018    100
    1  02/2018    100
    2  03/2018    200
    3  04/2018    200
    4  05/2018    200
    5  06/2018    500
    

    【讨论】:

      猜你喜欢
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2020-08-17
      相关资源
      最近更新 更多