如何在Pandas中用groupby补全缺失日期分组并填充均值为0?
补全一周天数并设置缺失日平均价格为0的解决方案
嘿,我来帮你搞定这个补全一周天数的问题!先确认下你提到的基础操作完全没问题:
- 获取厂商的计数:
df.manufacturer.value_counts() - 按day分组计算每日平均价格:
df.groupby("day").price.mean()
接下来重点解决补全一周7天,缺失天均值设为0的需求,分两种常见场景给你具体方案:
场景1:day列是数字格式(比如1=周一,7=周日)
假设你的day列用1-7的数字代表一周7天,代码可以这么写:
import pandas as pd # 先计算已有天数的平均价格 daily_mean = df.groupby("day").price.mean() # 创建包含完整7天的索引,根据你实际的day数值范围调整(比如0-6就写range(0,7)) full_days = pd.Index(range(1, 8), name="day") # 重新索引补全缺失天数,缺失值填充为0 daily_mean_full = daily_mean.reindex(full_days, fill_value=0)
场景2:day列是星期字符串格式(比如'Monday'、'周二')
如果你的day列是星期名称,只需要把完整的星期列表对应上就行:
import pandas as pd # 定义一周完整的星期名称,注意要和你数据里的格式完全匹配(大小写、语言要一致) full_week_days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] # 如果是中文就换成:['周一', '周二', '周三', '周四', '周五', '周六', '周日'] # 计算已有天数的平均价格 daily_mean = df.groupby("day").price.mean() # 重新索引补全,缺失位置填充0 daily_mean_full = daily_mean.reindex(full_week_days, fill_value=0)
小提示
groupby生成的结果只会包含数据中实际存在的day值,缺失的天数不会显示;reindex是核心:它会按照你指定的完整索引重新排列数据,缺失的位置直接用fill_value参数指定的0填充;- 一定要保证完整天数列表的格式和你DataFrame里
day列的格式完全一致,不然补全可能失效哦!
内容的提问来源于stack exchange,提问作者IordanouGiannis
相关产品推荐
相关产品推荐

