如何解决Pandas按ID分组计算平均速度时出现inf值的问题
问题原因
出现inf的核心原因是原始speed Km/h列中本身存在inf值(一般是前期计算速度时出现了除以0的运算),分组求和后inf被保留,最终计算平均时得到inf结果。你给出的示例中Total_steps均为正整数,排除了分母为0的可能。
解决方法
- 第一步:先清理原始速度列的无效值
import numpy as np # 将正负inf替换为NaN df2['speed Km/h'] = df2['speed Km/h'].replace([np.inf, -np.inf], np.nan) # 可选:根据业务场景过滤不合理的速度值,示例为保留0到120km/h之间的有效值 df2 = df2[df2['speed Km/h'].between(0, 120, inclusive='neither')]
- 第二步:直接用pandas内置的均值方法聚合,避免手动计算出现误差,该方法会自动跳过NaN值
# 仅需要平均速度的最简写法 df_Speed = df2.groupby('ID')['speed Km/h'].mean().reset_index(name='Avg_Speed')
如果需要同时保留总速度、有效步数和平均速度,用以下聚合写法:
df_Speed = df2.groupby('ID').agg( Total_Speed=('speed Km/h', 'sum'), Total_steps=('speed Km/h', 'count'), # 这里统计的是有效速度的条数,比统计ID的count更准确 Avg_Speed=('speed Km/h', 'mean') ).reset_index()
- 第三步:可选处理剩余的空值(如果某个ID下所有速度都是无效值,聚合后Avg_Speed会为NaN)
- 方案1:删除无有效速度的ID行
df_Speed = df_Speed.dropna(subset=['Avg_Speed'])- 方案2:将空平均速度填充为0
df_Speed['Avg_Speed'] = df_Speed['Avg_Speed'].fillna(0)
内容的提问来源于stack exchange,提问作者Hermoine
相关产品推荐
相关产品推荐

