Python 熊猫中按组填充缺失日期的有效方法?

Python 熊猫中按组填充缺失日期的有效方法?,python,pandas,date,group-by,Python,Pandas,Date,Group By,所以,我有一个像这样的数据帧: date ID value 2018-01-01 A 10 2018-02-01 A 11 2018-04-01 A 13 2017-08-01 B 20 2017-10-01 B 21 2017-11-01 B 23 每一组都有非常不同的日期,大约有40万组。所以,我想做的是以一种有效的方式填充每个组缺失的日期,所以看起来是这样的: date

所以,我有一个像这样的数据帧:

   date       ID   value
2018-01-01    A     10
2018-02-01    A     11
2018-04-01    A     13
2017-08-01    B     20
2017-10-01    B     21
2017-11-01    B     23
每一组都有非常不同的日期,大约有40万组。所以,我想做的是以一种有效的方式填充每个组缺失的日期,所以看起来是这样的:

   date       ID   value
2018-01-01    A     10
2018-02-01    A     11
2018-03-01    A     nan
2018-04-01    A     13
2017-08-01    B     20
2017-09-01    B     nan
2017-10-01    B     21
2017-11-01    B     23
我尝试了两种方法:

df2 = df.groupby('ID').apply(lambda x: x.set_index('date').resample('D').pad())
而且:

df2= df.set_index(['date','ID']).unstack().stack(dropna=False).reset_index()
df2= df2.sort_values(by=['ID','date']).reset_index(drop=True)
df2=  df2[df2.groupby('ID').value.ffill().notna()]
df2 = df2[df2.groupby('ID').value.bfill().notna()]
第一个,因为它使用了
apply
,所以速度非常慢。我想我可以用别的东西代替
pad
,所以我得到了
nan
,而不是前面的值,但我不确定这是否会对性能产生足够的影响。我等了大约15分钟,它还没跑完


对于每个组,第二个数据帧从整个数据帧中的第一个日期填充到最后一个日期,这将带来一个巨大的数据帧。之后,我将删除此方法生成的所有前导和尾随
nan
。这比第一个选项快得多,但似乎不是最好的选项。有没有更好的方法来做到这一点,这对大数据帧更有利?

?在与团队合作时,这是行不通的。当您在每个团队中有不同的2017年和2018年时,您想要什么?组中缺少日期?可能重复