如何在Pandas中按疫苗厂商分类填充累计接种量空值
问题出在分组逻辑上!
你把Date也放进groupby的分组键里了,这就导致每个分组里只有单一行数据(毕竟同一个厂商+日期只会出现一次),不管是bfill还是ffill都找不到同组内的其他值来填充空值,自然没效果。
你的需求是按厂商分组,在每个厂商的时间序列里用前一天的有效值填充后续空值,所以分组键只需要保留Vaccine Manufacturer就行,而且要确保每个厂商的行是按日期排序的(否则填充顺序会错)。
正确代码步骤:
- 先把
Date列转换成日期格式,确保排序逻辑正确:
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%y')
- 按厂商分组并按日期排序,对
Total_Vaccinations做向前填充:
df = df.sort_values(['Vaccine Manufacturer', 'Date']) df['Total_Vaccinations'] = df.groupby('Vaccine Manufacturer')['Total_Vaccinations'].ffill()
这样就能得到你想要的结果:所有空值都会被前一个有效累计接种量填充。
为什么你的第二种方法看似有效果?
你说第二种方法仅实现了向前填充,大概率是运行时分组逻辑没真正生效(比如数据存在重复的厂商+日期组合,但从你提供的样本数据看不存在),但本质上把Date加入分组键是完全错误的逻辑,偶然的结果也不具备可靠性。
内容的提问来源于stack exchange,提问作者jmoore00
相关产品推荐
相关产品推荐

