如何用Pandas将含速度与时长的DataFrame转为1秒间隔时间序列?
高效转换时长-速度数据为1秒间隔时间序列
放弃低效的逐行迭代,用pandas的向量化操作和repeat方法批量处理,能大幅提升处理速度,具体实现如下:
完整实现代码
import pandas as pd # 假设这是你从Excel导入的原始DataFrame df = pd.DataFrame({ 'speed': [5, 6, 4], 'time': [0.75, 3.12, 0.75] }) # 1. 把分钟时长转成总秒数(四舍五入取整,按需调整) df['total_seconds'] = (df['time'] * 60).round().astype(int) # 2. 按秒数批量重复对应speed值 speed_repeated = df['speed'].repeat(df['total_seconds']) # 3. 生成从0开始的连续1秒间隔时间戳,格式化为HH:MM:SS total_total_sec = df['total_seconds'].sum() timestamps = pd.to_timedelta(range(total_total_sec), unit='s').strftime('%H:%M:%S') # 4. 组合成最终的时间序列DataFrame final_df = pd.DataFrame({ 'timestamp': timestamps, 'speed': speed_repeated.reset_index(drop=True) }) # 查看结果 print(final_df.head())
关键步骤说明
- 时长转秒数:把
time列的分钟单位转成秒,确保每个speed对应的持续秒数是整数,方便后续重复操作。如果你的数据里时长都是精确到秒的小数(比如0.75分钟=45秒),可以直接用(df['time']*60).astype(int)避免四舍五入。 - 批量重复speed:用
repeat方法一次性生成所有秒对应的speed值,这是pandas底层优化的操作,比Python循环快得多。 - 生成时间戳:用
pd.to_timedelta生成连续的时间间隔,再格式化为你需要的HH:MM:SS格式,全程无需手动计算每个时间点。
效率优势
这种方法完全基于pandas的向量化运算,底层用C实现,处理大数量级数据时,速度会比逐行迭代快几十甚至上百倍,不会出现卡顿或耗时过长的问题。
内容的提问来源于stack exchange,提问作者Oilyfingers99
相关产品推荐
相关产品推荐

