如何使用过去几个月的最新可用数据来填充缺失值?

时间:2018-06-28 11:55:42

标签: python pandas datetime dataframe

我有一个这样的数据框:

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 

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:5)

一种方法:

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列。

我希望这会有所帮助。

答案 1 :(得分:0)

您可以先使用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