我有一个数据框 df
:
Serial_no date Index x y
1 2014-01-01 1 2.0 3.0
1 2014-03-01 2 3.0 3.0
1 2014-04-01 3 6.0 2.0
2 2011-03-01 1 5.1 1.3
2 2011-04-01 2 5.8 0.6
2 2011-05-01 3 6.5 -0.1
2 2011-07-01 4 3.0 5.0
3 2019-10-01 1 7.9 -1.5
3 2019-11-01 2 8.6 -2.2
3 2020-01-01 3 10.0 -3.6
3 2020-02-01 4 10.7 -4.3
3 2020-03-01 5 4.0 3.0
注意:
数据按 Serial_no
分组,date
是每月报告的数据(每月第一天)。
Index
列被设置为使得每个连续报告日期是系列中的连续数字。
每个组Serial_no
中报告的日期数不同。
每个组Serial_no
的报告日期间隔date
也不同(它们在每个组中不以相同的日期开始或结束)。
问题:
时间序列中某些date
日期没有报告的数据。请注意,在每个Serial_no
组中都缺少一些日期。
我想在每个组中添加一行缺少的日期date
,并将x
和y
列中的数据报告为“NaN”。
需要的数据框示例:
Serial_no date Index x y
1 2014-01-01 1 2.0 3.0
1 2014-02-01 2 NaN NaN
1 2014-03-01 3 3.0 3.0
1 2014-04-01 4 6.0 2.0
2 2011-03-01 1 5.1 1.3
2 2011-04-01 2 5.8 0.6
2 2011-05-01 3 6.5 -0.1
2 2011-06-01 4 NaN NaN
2 2011-07-01 5 3.0 5.0
3 2019-10-01 1 7.9 -1.5
3 2019-11-01 2 8.6 -2.2
3 2019-12-01 3 NaN NaN
3 2020-01-01 4 10.0 -3.6
3 2020-02-01 5 10.7 -4.3
3 2020-03-01 6 4.0 3.0
我知道如何使用以下代码将带有缺失日期的行中的空单元格替换为NaN
:
import pandas as pd
import numpy as np
df['x'].replace('', np.nan, inplace=True)
df['y'].replace('', np.nan, inplace=True)
我还知道如何使用以下代码重置索引,一旦缺失日期的行被插入:
df["Index"] = df.groupby("Serial_no",).cumcount('date')
然而,我不确定如何定位每个组中缺失的日期并插入这些(月报告)日期的行。感激不尽任何帮助。
x.asfreq('MS')
改为x.asfreq('MS', method='ffill')
好吗? - jezraeldf = df.sort_values(['Serial_no','date'])
。 - jezrael