You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas按整秒分组计算Speed列的平均值?

按整秒对Pandas DataFrame的速度列求平均值的最优方法

问题描述

我有如下结构的DataFrame:

Time (s)Speed (m/s)
1.15
1.22
1.38
......
8.36
8.47
8.54

希望按整秒对Speed (m/s)列求平均值,得到如下结构的结果:

Time (s)Speed (m/s)
15
......
85.67

滚动平均无法得到预期结果,刚接触Pandas,求最优实现方法。


核心解法:分组聚合

你需要先把带小数的时间转换为整秒分组键,再通过分组计算平均值,这是最贴合需求且高效的做法,具体步骤如下:

1. 生成整秒分组依据

对Time (s)列取整数部分,把所有属于同一整秒区间的记录归为一组:

# 直接将时间列转为整数,1.1/1.9都会被归为1秒组
df['whole_second'] = df['Time (s)'].astype(int)

如果你的时间存在负数(比如回溯时间),可以用np.floor()替代,确保分组逻辑正确:

import numpy as np
df['whole_second'] = np.floor(df['Time (s)']).astype(int)

2. 分组计算平均值并整理结构

按整秒分组后,对速度列求平均,最后重置索引、重命名列来匹配目标格式:

# 分组求平均,重置索引将分组键转为普通列
result = df.groupby('whole_second')['Speed (m/s)'].mean().reset_index()

# 重命名列名匹配需求
result.rename(columns={'whole_second': 'Time (s)'}, inplace=True)

# 可选:保留两位小数,和示例中的5.67格式一致
result['Speed (m/s)'] = result['Speed (m/s)'].round(2)

完整示例代码

import pandas as pd
import numpy as np

# 模拟你的原始数据
data = {
    'Time (s)': [1.1, 1.2, 1.3, 8.3, 8.4, 8.5],
    'Speed (m/s)': [5, 2, 8, 6, 7, 4]
}
df = pd.DataFrame(data)

# 生成整秒分组列
df['whole_second'] = df['Time (s)'].astype(int)

# 分组计算平均值并整理结构
result_df = df.groupby('whole_second')['Speed (m/s)'].mean().reset_index()
result_df.rename(columns={'whole_second': 'Time (s)'}, inplace=True)
result_df['Speed (m/s)'] = result_df['Speed (m/s)'].round(2)

print(result_df)

运行后输出:

Time (s)  Speed (m/s)
0         1          5.00
1         8          5.67

为什么滚动平均不适用?

滚动平均是基于滑动时间窗口(比如固定时长的连续窗口)计算的,而你的需求是按离散的整秒区间(1.01.999归为1秒,8.08.999归为8秒)做分组统计,两者的逻辑完全不同,所以滚动平均无法得到你想要的结果。

内容的提问来源于stack exchange,提问作者Marcus Bennett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:13:22