基于Power值的运动员间歇训练高功率区间时长统计技术问询
运动员间歇训练数据统计:高功率时长与间歇次数计算
需求:基于Power值自动统计训练中的间歇训练次数,并计算Power超过200瓦的高强度时段总时长。
示例数据集:
import pandas as pd from pandas import Timestamp df = pd.DataFrame( [[Timestamp('2022-08-05 10:11:04'), 140, 120], [Timestamp('2022-08-05 10:11:05'), 160, 155], [Timestamp('2022-08-05 10:11:06'), 230, 156], [Timestamp('2022-08-05 10:11:07'), 230, 155], [Timestamp('2022-08-05 10:11:08'), 230, 160], [Timestamp('2022-08-05 10:11:09'), 140, 130], [Timestamp('2022-08-05 10:11:10'), 140, 131], [Timestamp('2022-08-05 10:11:11'), 230, 170]], columns=['timestamp', 'power', 'heart rate'])
解决方案步骤
- 确保时间戳格式正确
先确认timestamp列为datetime类型(若原始数据格式不符):
df['timestamp'] = pd.to_datetime(df['timestamp'])
- 标记高功率时段
新增一列标记当前记录是否属于高功率(>200瓦):
df['high_power'] = df['power'] > 200
- 识别连续的高功率区间
通过状态变化分组,区分不同的连续高功率间歇段:
# 标记每行与上一行的功率状态是否变化 df['state_change'] = df['high_power'].ne(df['high_power'].shift()) # 为每个连续的状态区间分配唯一ID df['interval_id'] = df['state_change'].cumsum()
- 计算高功率总时长与间歇次数
分组统计每个高功率区间的起止时间和时长,再汇总结果:
# 筛选高功率区间并计算每个区间的时长 high_power_stats = df[df['high_power']].groupby('interval_id').agg( start=('timestamp', 'min'), end=('timestamp', 'max'), duration=('timestamp', lambda x: x.max() - x.min()) ) # 总高功率时长 total_duration = high_power_stats['duration'].sum() # 间歇训练次数(即高功率区间的数量) interval_count = len(high_power_stats)
结果说明
针对示例数据:
- 间歇训练次数为2次
- 高功率总时长为
0 days 00:00:03(对应连续3秒的高功率段加上1秒的单独高功率记录,总时长3秒)
内容的提问来源于stack exchange,提问作者pepijn
相关产品推荐
相关产品推荐

