我有一个这样的数据框:
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
有人可以帮忙吗?
答案 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