使用Pandas按月、日、小时计算Value列均值失败的问题排查
解决Pandas分组后仅对指定列计算均值的问题
嘿,我来帮你搞定这个困扰!你遇到的问题根本不是Value列的0值导致的——核心原因是你在分组聚合的时候,没有明确告诉Pandas只对Value列计算平均值,所以它默认对所有数值型列(包括Count和Year)都执行了均值计算,这才出现了不符合预期的结果。
正确的解决步骤
这里给你两种靠谱的实现方式,都能精准只计算Value列的均值:
方法1:分组后直接指定目标列求均值
先确保你已经有了month、day、hour这三列(如果是从datetime列提取的,代码我也给你附上),然后直接在groupby后指定Value列再调用mean():
# 如果你是从datetime列提取月/日/小时: df['month'] = df['datetime_col'].dt.month df['day'] = df['datetime_col'].dt.day df['hour'] = df['datetime_col'].dt.hour # 分组并仅计算Value列的均值 df1 = df.groupby(['month', 'day', 'hour'])['Value'].mean().reset_index()
方法2:用agg方法明确指定聚合规则
这种方式更灵活,适合后续需要对不同列做不同聚合操作的场景,这里我们只需要给Value列指定mean:
df1 = df.groupby(['month', 'day', 'hour']).agg({'Value': 'mean'}).reset_index()
为什么之前的方法不行?
如果你之前的代码是类似df.groupby(['month','day','hour']).mean()这种写法,Pandas会自动识别所有数值类型的列(比如Count、Year、Value),并对每一列都计算均值——这就是为什么你会看到Count和Year的均值,而不是你想要的只有Value列的结果。
至于你把0替换成null的操作,其实对均值计算本身没影响(mean()会自动忽略null值),但这并不是解决当前问题的关键哦。
内容的提问来源于stack exchange,提问作者Eamon Murphy
相关产品推荐
相关产品推荐

