Python:在groupby数据框中插入缺失日期、时间序列的行

Python:在groupby数据框中插入缺失日期、时间序列的行,python,pandas,dataframe,time-series,data-science,Python,Pandas,Dataframe,Time Series,Data Science,我有一个数据帧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

我有一个数据帧
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
注意: 数据按
序列号
分组,
日期
是每月(每月第一次)报告的数据。 设置
索引
列,使每个连续报告的日期都是序列中的连续数字。 各组报告日期的数量不同。 每个组的报告日期间隔不同(每个组的开始或结束日期不相同)

问题: 时间序列中的某些日期
date
没有报告数据。请注意,每个
序列号组中缺少一些日期。
我想在每组中为缺少的日期添加一行
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
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')

<强>我知道如何使用以下代码来替换空白代码单元格:<代码>楠<代码>,使用以下代码:< /强>

   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
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')
我还知道如何在插入缺少日期的行后使用以下代码重置索引:

   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
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')
但是,我不确定如何定位每个组中缺少的日期,并为这些(每月报告的)日期插入行。非常感谢您的帮助。

使用带有in的自定义函数,然后通过以下方式重新分配
索引:

替代解决方案包括:


完美的谢谢。嗨@jezrael,如果我想在每组中添加相同范围的日期,我会怎么做?