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年时,您想要什么?组中缺少日期?可能重复